1

受信したメールを転送し、その上にメッセージを追加しようとしています。私が書いた次のコードはちょっとこれを行いますが、元のメッセージのすべてのフォーマットを失います。元のメッセージの形式を維持しながら、電子メールに追加のテストを追加できる方法はありますか?

私のコード:

Sub xForward()
    myMessage = "You recently requested access to the table.   We are requiring all requests to complete a mandatory training session." & vbCr & vbCr & "Thank you, " & vbCr & "Ricky"

    Dim itmOld As MailItem, itmNew As MailItem

    Set itmOld = ActiveInspector.CurrentItem
    Set itmNew = itmOld.Forward

    itmNew.Body = myMessage & vbCr & vbCr & itmOld.Body
    itmNew.Subject = "Access Request"
    itmNew.Display

    Set itmOld = Nothing
    Set itmNew = Nothing
End Sub

itmNew の本文を更新しない場合は、元のメッセージの形式を維持します。itmNew.Body を更新した瞬間、itmOld.Body は単純なテキストで記述され、すべての書式設定が失われます。

4

1 に答える 1

0

JPのコメントはあなたを正しい方向に向けていると思いますが、あなたの質問はHTMLの限られた知識から生じていると思います。これはHTMLに関する完全なチュートリアルではありませんが、開始されることを願っています。

Debug.Printを使用して.HTMLBodyをイミディエイトウィンドウに出力すると、次のように表示されます。

<!DOCTYPE html PUBLIC "-// W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns = "http ://www.w3.org/1999/xhtml "> <head>

ここにはたくさんのものがあります

</ head> <body>

ここにはたくさんのものがあります

</ body> </ html>

メッセージを作成したパッケージがXMLバージョンのHTMLをサポートしている場合にのみ、「<!DOCTYPEhtml...」が表示されます。表示される最小値は次のとおりです。

<html><head>ここにはたくさんのものがあります</head><body>ここにはたくさんのものがあります</body></ html>

余分なメッセージをこの前または最後に配置すると、HTMLのルールに違反することになります。何が起こるかは、受信者の電子メールパッケージがどれだけ寛容であるかによって異なります。HTMLの規則に準拠するには、「<body>」と「</body>」の間のどこかに追加のメッセージを配置する必要があります。

いくつかのメッセージを見ると、それらがどれだけ変化する可能性があるかがわかります。白地に黒のテキスト、黒地に白のテキストがあり、その間にすべてのバリエーションがあります。メッセージの作成者が何をしたかに関係なく、メッセージは読み取り可能でなければなりません。私の提案は、上部に1つのセルのテーブルを作成し、フォントと背景色を設定することです。次のことを試してから、要件に適合させてください。

Dim AddedMsg As String
Dim Pos As Long

' Create message to be inserted
' =============================
' Start a table with white background and blue text
AddedMsg = "<table border=0 width=""100%"" style=""Color: #0000FF"" bgColor=#FFFFFF>"
' Add row with single cell
AddedMsg = AddedMsg & "<tr><td><p>Cool stuff you must see!!</p></td></tr>"
' End table
AddedMsg = AddedMsg & "</table>"

' Code to add message once you have checked there is an HTML body    
'================================================================
Pos = InStr(1, LCase(.HTMLBody), "<body")
If Pos = 0 Then
  ' This should be impossible.
  Call MsgBox("<Body> element not found in HTML body", vbCritical)
  ' Code to handle impossible situation
End If
Pos = InStr(Pos, .HTMLBody, ">")
If Pos = 0 Then
  ' This should be impossible.
  Call MsgBox("Terminating > for <Body> element not found in HTML body", vbCritical)
  ' Code to handle impossible situation
End If
'Insert your message
.HTMLBody = Mid(.HTMLBody, 1, Pos) & AddedMsg & Mid(.HTMLBody, Pos + 1) 
于 2012-05-09T09:43:14.863 に答える