選択されたメールへの返信メールを表示するマクロ


コメントにて以下のようなご要望をいただきました。


選択されたメールに対して返信したか確認し、返信済みの場合、その返信メールのオブジェクト(MailItem)を取得することは可能でしょうか。
一般的なインターネットメールであれば、受信メールのMessage-IDと送信済みメールのIn-Reply-ToやReferencesを比較することで実現可能と考えておりますが、Exchangeの場合はヘッダー情報の比較で確認できるのでしょうか。
初歩的な質問で恐縮ですが、よろしくお願いいたします。


Exchange サーバーでも返信した送信済みメールの In-Reply-To には、元のメッセージの Message-ID が含まれています。
そのため、選択されたメッセージの Message-ID を In-Reply-To に持つ送信済みアイテムのメールを検索すれば、実現は可能でしょう。
以下がそのようなことを実行するマクロです。
返信済みかどうかを検知することは難しいので、とりあえず検索して見つからなければメッセージを表示するという動作にしています。

' ここをトリプルクリックでマクロ全体を選択できます。
Const PR_INTERNET_MESSAGE_ID = "http://schemas.microsoft.com/mapi/proptag/0x1035001E"
Const PR_IN_REPLY_TO_ID = "http://schemas.microsoft.com/mapi/proptag/0x1042001E"
'
Sub FindRepliedItem()
    Dim objItem As MailItem
    Dim strMsgID As String
    Dim fldSent As Folder
    Dim colItems As Items
    Dim oneItem 'As MailItem
    If TypeName(Application.ActiveWindow) = "Inspector" Then
        Set objItem = ActiveInspector.CurrentItem
    Else
        Set objItem = ActiveExplorer.Selection(1)
    End If
    '
    strMsgID = objItem.PropertyAccessor.GetProperty(PR_INTERNET_MESSAGE_ID)
    Set fldSent = Session.GetDefaultFolder(olFolderSentMail)
    Set colItems = fldSent.Items
    Set oneItem = colItems.Find("@SQL=""" & PR_IN_REPLY_TO_ID & """ = '" & strMsgID & "'")
    If oneItem Is Nothing Then
        MsgBox "返信アイテムが見つかりませんでした。"
    Else
        oneItem.Display
        Set oneItem = colItems.FindNext
        While Not oneItem Is Nothing
            oneItem.Display
            Set oneItem = colItems.FindNext
        Wend
    End If
End Sub

マクロの登録方法やメニューへの追加について

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中