前回の「【Outlook VBA】カンタン!送信前に入力した宛先に指定外ドメインが含まれるか確認する」に続きメール誤送信対策として、添付ファイルが含まれる場合、送信前に警告メッセージを出すようにしたいと思います。
もくじ
添付ファイルを送るときのリスクについて
メール誤送信はどの企業でも必ず発生しています。メールの件数は増大傾向であり人間が操作する以上ミスは避けられません。その中で添付ファイルがあった場合にはその情報量や内容に応じて深刻度が増していきます。さらに他社の情報であった場合は自社だけの問題ではなくなり、被害の範囲はどんどん拡大していきます。
添付ファイルが怖いところはもう一つあって、それは一度送ってしまったファイルを回収することは困難であることです。誤送信先のPCに保存される形となりますが、削除をする場合には基本的に所有者へお願いすることとなり、削除をしたかについては所有者のPCを確認しない限りわかりません。
そんなリスクの高い添付ファイルですが、社外のアドレスに添付ファイル付きのメールを送信する時に警告メッセージを表示させるか、そもそもメールを送信させないようににすれば未然に事故は防ぐことができるのです。
添付をチェックする方法について
今回は指定ドメインでない場合で、かつ添付ファイルを含んでいたら警告メッセージを出す仕様となります。
指定ドメインでない場合の判定は前回の方法を流用しますので、添付ファイルの有無のみを考えたいと思います。
まず添付ファイルはAttachmentsコレクション (添付ファイルの集合)内に記録されますので、そのオブジェクト数を取得するようにします。
Item.Attachments.Count
添付ファイルがなければ0件、あればその件数が出力されます。ですので、1件以上出力された場合に警告メッセージを作るようにします。
完成したマクロは以下の通りです。
マクロを設置する下準備をする。
以下を参考にVBAコードを配置する場所を表示させます。
マクロを登録する
「開発」タブ>「Visual Basic」を押します。
「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] > [ThisOutlookSession] を開きます。
右のコードエリアへ、以下のコードを貼り付けて保存します。
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim mailTo As Variant
Dim mailCc As Variant
Dim WanMsg As String
Dim WanMsg2 As String
Dim WanMsg3 As String
Dim myDomainList As Variant
Dim myDomain As Variant
Dim checkNum As Long
Dim recips As Object
Dim recip As Object
Dim pa As Object
Dim paAddr As Variant
'添付ファイルカウント
If Item.Attachments.Count <> 0 Then
WanMsg3 = "添付ファイルは" & Item.Attachments.Count & "件あります。"
End If
'チェックナンバー初期化
checNum = 0
'指定ドメイン(ホワイトリストです。カンマ区切りでドメインを追加することができます。)
myDomainList = Array("extan.jp", "extan2.jp")
'Itemオブジェクトから宛先を取得
mailTo = Item.To
mailCc = Item.CC
'宛先を配列へ格納
mailTo = Split(mailTo, ";")
mailCc = Split(mailCc, ";")
WanMsg = "▼宛先は" & vbCrLf
For i = 0 To UBound(mailTo)
WanMsg = WanMsg & "To:" & mailTo(i) & vbCrLf
Next i
For i = 0 To UBound(mailCc)
WanMsg = WanMsg & "Cc:" & mailCc(i) & vbCrLf
Next i
'outlookオブジェクトの名前空間を指定
Const PR_SMTP_ADDRESS As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
Set recips = Item.Recipients
'SMTPアドレスを取得
For Each recip In recips
Set pa = recip.PropertyAccessor
'ホワイトリストに該当するドメインであるかチェック
For Each myDomain In myDomainList
If InStr(pa.GetProperty(PR_SMTP_ADDRESS), myDomain) <> 0 Then
checkNum = checkNum + 1
End If
Next
'ホワイトリストに含まれない場合は警告メッセージ変数に追記
If checkNum = 0 Then
WanMsg2 = WanMsg2 & "SMTP:" & pa.GetProperty(PR_SMTP_ADDRESS) & vbCrLf
End If
checkNum = 0
Next
WanMsg = WanMsg & "が含まれています。" & vbCrLf
If WanMsg2 <> "" Then
WanMsg = WanMsg & vbCrLf & "▼以下は指定外ドメインです。再確認してください。" & WanMsg2 & vbCrLf
'添付ファイルがあった場合は警告メッセージを表示
If WanMsg3 <> "" Then
WanMsg = WanMsg & "▼添付ファイルは指定外ドメインへ送信できません。削除をしてください。" & vbCrLf & WanMsg3 & vbCrLf
If MsgBox(WanMsg, vbOKOnly + vbExclamation) = vbOK Then
Cancel = True
Exit Sub
End If
End If
End If
WanMsg = WanMsg & "上記宛先へメールを送信してもよろしいですか?" & vbCrLf & vbCrLf
If MsgBox(WanMsg, vbYesNo + vbExclamation) = vbNo Then
Cancel = True
Exit Sub
End If
Set Item = Nothing
End Sub
試しにサンプルメールを作りチェックされるか確認をする
コードの説明はさておき、早速チェックされるか確認をしてみましょう。
適当なメールを作り、宛先、件名を入力し、添付ファイルを幾つか添付します。
サンプルではホワイトリストにドメイン”extan.jp”, “extan2.jp”を指定していますので、それ以外のドメインである”test3@extan.com”が指定外ドメインとなります。添付ファイルは2個いれています。
次に「送信」ボタンを押します。
はい!警告メッセージが表示されましたね。
添付ファイルを社外へ送る場合は中断させたいので、「OK」の一択となります。
添付ファイルがない場合は確認メッセージとなり、「OK」であれば送信されます。
最後に
いかがでしょうか。この仕組みが全社員に実装されれば今よりぐっとリスクは軽減されるものと思います。
ただ、一番よいのはSharePointなどコンテンツマネジメントシステムを利用して権限による閲覧制御を施し、添付ファイルは社内ルールで禁止にすることかもしれませんね。
次回もいろいろな使い方をとりあげていきたいと思います!
コメントを残す