4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Outlookで社外へのメール誤送信を防止する

Last updated at Posted at 2018-12-12

はじめに

社内あてに送ったメールに社外の人が含まれてるってよくありますよね。

・・・ぇ?無いですか。
そういうチェックが完璧な方は全然問題ないと思いますが、間違えて送ってしまうなんてことあると思います。
だってにんげんだもの。

そんな誤送信を防止する仕組みを考えてみました。

参考にした記事

Outlookはよく使われているので、参考記事はそこそこ見つかりました。

【誤送信防止】Outlookにて、社外秘メールの送り先に社外アドレスが含まれていないかチェック

Outlookで宛先をチェック・制限するマクロ

OutlookもVBAを動かすことができるので、送信のタイミングでドメインをチェックすれば社内・社外の判定ができそうです。

LegacyExchangeDN (X.500)

と思ってさらっとマクロ改造して動かしたら、よくわからんアドレスが出てきました。
image.png

Exchange環境下でのOutlookはSMTP形式(xxx@yyy.com)の一般的なメールアドレスではなく

/o=組織名/ou=管理グループ/cn=Recipients/cn=名前またはエイリアス

で示されるLegacyExchangeDNという形式で管理されるらしい。

Exchange 環境における電子メール アドレス = LegacyExchangeDN

ということでExchange環境下も社内宛として、条件追加して以下の感じにマクロ作りました。

コード

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

Const CHECK_DOMAIN = "xxx.com"  'ドメイン判定用
Const CHECK_EXCHANGE = "/o=exchangelabs/" 'LegacyExchangeDN判定用

Dim RECV_INFO As Object
For Each RECV_INFO In Item.Recipients
    Dim ATESAKI As String, DOMAIN As String, ATE_LIST As String
    If RECV_INFO.AddressEntry.Members Is Nothing Then
        'メールアドレス直接の場合
        ATESAKI = RECV_INFO.Address
        DOMAIN = LCase(Right(ATESAKI, Len(ATESAKI) - InStr(ATESAKI, "@")))
        If DOMAIN <> CHECK_DOMAIN Then
            If LCase(Left(ATESAKI, InStr(2, ATESAKI, "/"))) <> CHECK_EXCHANGE Then
                ATE_LIST = ATE_LIST & ATESAKI & vbCr
            End If
        End If
    Else
        '連絡先グループの場合
        Dim MEMBER As Object
        For Each MEMBER In RECV_INFO.AddressEntry.Members
            ATESAKI = MEMBER.Address
            DOMAIN = LCase(Right(ATESAKI, Len(ATESAKI) - InStr(ATESAKI, "@")))
            If DOMAIN <> CHECK_DOMAIN Then
                If LCase(Left(ATESAKI, InStr(2, ATESAKI, "/"))) <> CHECK_EXCHANGE Then
                    ATE_LIST = ATE_LIST & ATESAKI & vbCr
                End If
            End If
        Next MEMBER
    End If
Next RECV_INFO

If ATE_LIST <> "" Then
    Dim ALERT_MSG As String
    ALERT_MSG = "社外アドレス" & vbCr & vbCr & _
    ATE_LIST & vbCr & _
    "が含まれています。" & vbCr & "送信しますか?" & vbCr

    If MsgBox(ALERT_MSG, vbYesNo + vbExclamation) = vbYes Then

    Else
        Call MsgBox("キャンセルしました。")
        Cancel = True
    End If
End If

End Sub

終わりに

image.png

先程のマクロを設定して社内ドメイン(Exchange含む)以外のアドレスに送信しようとすると、ポップアップでアラートを出してくれます。
これで気づかぬタイミングで社外に誤送信する事は減らせそうです。

4
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?