HTML 形式の本文に文字列を追加する方法


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


いつも参考にさせて戴いております。今回初めて質問致します。
HTML形式で図が含まれているメールに対して
mailItem の reply メソッドを行うと図が保持されますが、本文に何かを追記しようとすると図が失われます。
保持する方法はありますでしょうか。
(Outlook 2010 or 2013, VBA はExcel から起動)
ex) objReply.body = “test” + objReply.body –> 図がなくなる


MailItem オブジェクトの Body プロパティはテキスト形式の本文を参照あるいは設定するためのプロパティです。
そのため、このプロパティに文字列を設定すると、メッセージ形式が自動的にテキスト形式に変換され、HTML の書式や図は失われてしまいます。

HTML 形式のメールの本文は HTMLBody プロパティを使って参照や設定を行います。
ただし、本文の先頭に文字列を追加する際に、以下のようにしてしまうと想定外の動作をする場合があります。

objReply.HTMLBody = "test" & objReply.HTMLBody

HTMLBody プロパティは HTML のタグを含んだ HTML 本文全体を取得するのですが、その先頭には <HEAD> タグで囲まれた CSS の定義などが存在します。
それらの定義の前に文字列を追加してしまうと、適切な処理ができなくなる可能性があるのです。

そのため、HTML 本文の先頭に文字列を追加する場合、本文の開始を意味する BODY タグを検出し、その後ろに文字列を追加する必要があります。
以下は、HTML 本文の先頭に文字列を追加するサブルーチンの例です。

' ここをトリプルクリックでマクロ全体を選択できます。
Public Sub InsertStringToHTMLBody(objItem As MailItem, strText As String)
    Dim i As Long
    ' body タグの開始を検索
    i = InStr(LCase(objItem.HTMLBody), "<body")
    ' body タグの終了を検索
    i = InStr(i, objItem.HTMLBody, ">")
    ' body タグの終了位置に文字列を挿入
    objItem.HTMLBody = Left(objItem.HTMLBody, i) & strText & Mid(objItem.HTMLBody, i + 1)
    Debug.Print objItem.HTMLBody
End Sub

広告

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中