• このエントリーをはてなブックマークに追加

Outlook VBA – メール送信時に社外アドレスと添付ファイル確認で誤送信と情報漏えいを防ぐ方法

Outlookでのメール送信時に、宛先と添付ファイルの確認をし、添付忘れや社外への誤送信を防止するためのVBAマクロです。
添付ファイル忘れの可能性がある場合に警告し、社外メールアドレス宛に送信する場合には宛先確認のメッセージボックスを表示します。
企業の情報セキュリティポリシーでは即時送信を禁止する場合も多いので、このVBAマクロは、社内のセキュリティ向上にも役立ちます。




誤送信防止の実際の流れ

Outlookでメール送信時に、以下の順序でチェックします。

  1. 添付ファイルチェック
    添付ファイルの有無をチェックし、本文に「添付」と記入があるのに添付ファイルが無い場合に、「はい/いいえ」確認ダイアログを表示し、「はい」なら「宛先チェック」へ、「いいえ」ならキャンセルされます。
    添付ファイル忘れ確認ダイアログ
  2. 宛先チェック
    宛先をチェックし、許可されたドメイン以外(社外)への送信が含まれる場合、件名と宛先メールアドレス(登録してあれば宛先表示名も)を表示し、「はい/いいえ」確認により、「はい」なら送信トレイに入り(Outlookオプションの設定次第では即時送信)、「いいえ」ならキャンセルされます。
    社外アドレス確認ダイアログ

使用するコード

下記が実際にマクロに使用するコードです。
「許可するドメイン」として指定されたドメイン宛には、確認メッセージを表示せずにそのまま送信します。なので、「許可する宛先ドメイン指定」の“example.co.jp”を自社ドメイン等に変更して下さい。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

 Dim myDomain As String '許可するドメイン
 Dim recInfo As Recipient '宛先
 Dim recAddr As String '宛先アドレス
 Dim recList As String '宛先リスト
 Dim alertMsg As String '警告メッセージ
 Dim strSubject As String 'メール件名
 Dim strBody As String 'メール本文
 Dim recName As String '宛先表示名

 myDomain = "example.co.jp" '許可する宛先ドメイン指定
 strSubject = Item.Subject 'メール件名
 strBody = Item.Body 'メール本文

'添付ファイルチェック
 If InStr(strSubject & strBody, "添付") > 0 And Item.Attachments.Count = 0 Then
  If MsgBox("添付ファイルを忘れている可能性があります." & vbCrLf & _
   "そのまま送信しますか?", vbYesNo + vbQuestion + vbDefaultButton2) = vbNo Then
   Cancel = True
   Exit Sub
  End If
 End If

'宛先チェック
 For Each recInfo In Item.Recipients
  recAddr = recInfo.Address
  If Right(recAddr, Len(recAddr) - InStr(recAddr, "@")) <> myDomain Then
   If recInfo.Name = recAddr Then
    recName = ""
   Else
    recName = " ( " & recInfo.Name & " ) "
   End If
   recList = recList & recAddr & recName & vbCrLf
  End If
 Next recInfo

 If recList <> "" Then
  alertMsg = "件名: " & Item.Subject & vbCrLf & vbCrLf & "社外アドレス:" & _
   vbCrLf & vbCrLf & recList & vbCrLf & "上記宛先へメールを送信してもよろしいですか?"
  If MsgBox(alertMsg, vbYesNo + vbExclamation + vbDefaultButton2) <> vbYes Then
   Cancel = True
   Exit Sub
  End If
 End If

End Sub

以下は実際の設定方法についての説明です。

まずはデジタル署名の設定

デジタル署名を設定していないとOutlookでVBA プロジェクトが使えないので、まず、デジタル署名の設定を行います。

自己署名のデジタル証明書を作成

  1. 「デジタル証明書の作成」ダイアログを開く
    Windowsのスタートメニューに[VBA プロジェクトのデジタル署名]へのショートカットがある場合
    [スタートメニュー] > [すべてのプログラム] > [Microsoft Office] > [Microsoft Office ツール] > [VBA プロジェクトのデジタル署名]からデジタル署名の登録をする。
    Windowsのスタートメニューに[VBA プロジェクトのデジタル署名]へのショートカットが無い場合
    Officeをインストールしたドライブの Program Files (x86)\Microsoft Office\Office15 にある SELFCERT.EXE を実行し、「デジタル証明書の作成」ダイアログを開く。
    SELFCERT.EXE が無い場合
    Officeインストール時に「VBA プロジェクトのデジタル証明書」をインストールしていないと思われるので、インストールする。
  2. 「デジタル証明書の作成」ダイアログの「証明書の名前」欄に適当な名前を入力して[OK] ボタンをクリック
    デジタル証明書の作成
  3. 「SelfCert 成功」ダイアログが表示されたら作成完了ですので、[OK] ボタンをクリック
    SelfCert 成功
    作成した自己署名デジタル証明書の確認
    作成したデジタル証明書は、コントロールパネルのインターネットオプションから確認できます。
    「インターネット オプション」 > 「インターネットのプロパティ」ダイアログ > 「コンテンツ」タブの[証明書]ボタンをクリックして「証明書」ダイアログを表示→「個人」タブに作成した証明書があるはずです。
    証明書ダイアログ

VBA プロジェクトにデジタル署名をする

  1. Outlookを起動して、Alt+F11で(または「リボンのユーザー設定」で「開発」タブを表示させて) Visual Basic Editor を起動。
  2. 「ツール」 > 「デジタル署名」で「デジタル署名」ダイアログを開く。
    Visual Basic Editor デジタル署名
  3. 作成したデジタル証明書を選択して[OK]ボタンクリックでダイアログを閉じる。
    デジタル署名ダイアログ

コードを貼り付けてマクロを登録する

  1. 引き続き「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] > [ThisOutlookSession] を開き、コードを貼り付けて保存する。
    ThisOutlookSession
    Outlookの再起動が必要な場合があります。また、保存されていない時はダイアログが開くので保存して下さい。
    VBAプロジェクト保存ダイアログ

以上、ご参考になれば幸いです。
以下のページを参考にさせていただきました。ありがとうございます。

# よくある問題 上司「おーい、この社外秘の内容をメールで送ってくれー」 ぼく「原価情報も入っているなぁ。関係者各位を宛先に入れて、、、送信!」 ぼく「*...
誤送信防止・内部セキュリティ向上に使える!outlockでメールの宛先を制限するマクロ 現在Microsoft…







  • このエントリーをはてなブックマークに追加