添付ファイルが埋め込み画像かどうかを判断する方法


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


HTML形式のメールで本文に画像が張り付けられている場合にその画像がAttachmentとして認識されます
本来の添付ファイルとこの本文の画像を区別する項目、あるいは方法があるでしょうか?

#一旦仮の返信用オブジェクトを作成して、bodyformatをテキストに変換すれば本来の添付ファイルだけ残りますが、、
#こういう小細工なしに直接判断できないでしょうか、、


Outlook オブジェクト モデルの Attachment オブジェクト自体のプロパティでは、添付ファイルが HTML 形式の埋め込み画像かどうかを判断するために使用できるものがありません。

しかし、MAPI のプロパティでは埋め込み画像特有のものがいくつかあり、それらを使用することで判断することが可能です。

そのうちの一つが  PR_ATTACH_FLAGS というプロパティです。
このプロパティが 0 以外である場合、HTML や RTF で埋め込まれた画像ということになりますが、動作確認を行ったところ ItemSend イベントなどでアイテムを処理する際に、埋め込みである画像の PR_ATTACH_FLAGS が 0 になっていることがあったので、このフラグだけでは判断できない可能性があります。

そこで、もう一つの PR_ATTACH_CONTENT_ID というプロパティも確認します。
このプロパティは HTML メールの IMG タグの SRC 属性で埋め込まれた画像を指定する際の文字列となりますので、これが存在する場合は HTML の埋め込み画像と判断できます。

さらに、リッチテキスト形式の場合には Attachment の Type プロパティが olOLE である場合に埋め込み画像であると判断できるため、リッチテキスト形式での送信がある場合はこのプロパティも確認する必要があります。

これらのプロパティをチェックし、添付ファイルが埋め込み画像であるかを評価する関数は以下のようになります。

' ここをトリプルクリックでマクロ全体を選択できます。
Private Function IsAttachEmbedded( objAttach As Attachment )
    Const PR_ATTACH_FLAGS = "http://schemas.microsoft.com/mapi/proptag/0x37140003"
    Const PR_ATTACH_CONTENT_ID = "http://schemas.microsoft.com/mapi/proptag/0x3712001E"
    Dim iAttFlags As Integer
    Dim strAttCID As String
    ' 既定は通常の添付ファイル
    IsAttachEmbedded = False
    ' フラグが 0 以外なら埋め込み画像
    iAttFlags = objAttach.PropertyAccessor.GetProperty(PR_ATTACH_FLAGS)
    If iAttFlags <> 0 Then
        IsAttachEmbedded = True
    End If
    ' Content ID があれば埋め込み画像
    strAttCID = objAttach.PropertyAccessor.GetProperty(PR_ATTACH_CONTENT_ID)
    If strAttCID <> "" Then
        IsAttachEmbedded = True
    End If
    ' OLE オブジェクトなら埋め込み画像
    If objAttach.Type = olOLE Then
        IsAttachEmbedded = True
    End If
End Function

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

広告

添付ファイルが埋め込み画像かどうかを判断する方法」への3件のフィードバック

  1. 日頃は勉強させていただき感謝いたしております。
    Excelからグローバルアドレスをダウンロードしております。こちらの資料を活用し無事に実行できました。
    アドレスを右クリックしプロパティを参照すると本務、兼務のタブが表示されます。この部分のデータをダウンロードしたいです。プロパティの一覧に該当する名称がありません。(発見できていない?)
    どのようにアクセスするのでしょう。ご教示いただけますと助かります。何卒ご検討の程よろしくお願い申し上げます。

    • 通常のExchange環境では「本務」や「兼務」というプロパティは存在しません。
      おそらくExchangeの詳細テンプレートのカスタマイズ機能を使って、Active Directoryの特定の属性のラベルを「本務」などとして表示しているものと考えられます。
      カスタマイズされたプロパティが実際にはどのプロパティに該当するのかについては、Exchangeの管理者にご確認ください。

  2. […] 添付ファイルを削除するにはアイテムの Attachments の Remove メソッドを使用します。 これを使って転送メールからすべての添付ファイルを削除すれば実現は可能ですが、ただ単に削除してしまうと HTML メールの埋め込み画像まで削除してしまいます。 そのため、以前紹介した添付ファイルが埋め込み画像かどうか判断する方法を使用し、埋め込み画像ではないファイルだけ削除して転送するようにしました。 マクロは以下の通りです。 ForwardWithoutAttach を自動仕分けのルールのスクリプトとして指定してください。 […]

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中