Outlook 開封確認メールが配信されない(VBA)

Outlook(2013, 2016, 2019)を使用している環境で、相手から「開封確認の要求」されたメールを受信し、開封したにもかかわらず配信されないケース。

送信者(開封したことを通知する側)と受信者の間にあるMTA(メールサーバー)で、Disposition-Notification-ToがNULLの場合に、そのメール配信を停止するMTAがあると発生。

<開封通知に関しての仕様>

Outlook:"Disposition-Notification-To:NULL"をつけて開封通知メールを送信
他のメーラー:"Disposition-Notification-To"を削除して開封通知メールを送信

<発生の仕組み>

A:開封確認の要求、メーラー:任意
B:開封通知、メーラー:Outlook使用

Step.1

A:開封確認要求("Disposition-Notification-To:Aのメールアドレス")を付けたメールをBに送信

Step.2

B:AのメールをOutlookで受信

Step.3

B:Aに対し、開封通知メールを自動送信("Disposition-Notification-To:NULL"を付加)

Step.4

MTAの一部において、"Disposition-Notification-To:NULL" があるメールを廃棄

Step.5

B:Bは開封確認要求に対して開封通知をしたことになっているが、Aにはそれが届かない

VBAをつかった解決方法

VBAをつかい、"Disposition-Notification-To" がついたメールは、開封通知をする/しないの選択に関わらず自動で所定のメールを返信する。

'
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
     On Error Resume Next
     Dim objItem As Object
     Set objItem = Session.GetItemFromID(EntryIDCollection)
     If objItem.MessageClass = "IPM.Note" Then
         Dim msgItem As MailItem
         Set msgItem = objItem
         AutoReply msgItem
     End If
End Sub
'
'
Private Sub AutoReply(msgItem As MailItem)

     Dim userProp As UserProperty

     ' 自分からのメールには返信しない
     If LCase(msgItem.SenderEmailAddress) = LCase(Session.CurrentUser.Address) Then
         Exit Sub
     End If
     '
     If msgItem.ReadReceiptRequested Then
         Dim objReply As MailItem
         Set objReply = msgItem.Reply
         objReply.Body = "以下のメールを受信しました。" & vbCrLf & _
             "送信日時:" & msgItem.SentOn & vbCrLf & _
             "件  名:" & msgItem.Subject & vbCrLf & _
             "Disposition-Notification-To:" & msgItem.ReadReceiptRequested
         objReply.Send
         ' カスタム プロパティに返信済みと設定
         Set userProp = msgItem.UserProperties.Add("自動返信", olText)
         userProp.Value = "Done"
         msgItem.Save
     End If
End Sub

参考:Outlook研究所 特定の文字列を件名や本文に含むメールを受信した際に自動返信するマクロ