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 过渡//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http ://www.w3.org/1999/xhtml"> <head>

这里有很多东西

</head> <body>

这里有很多东西

</body> </html>

如果创建消息的包支持 HTML 的 XML 版本,您只会得到“<!DOCTYPE html ...”。您应该看到的最小值是:

<html><head> 这里有很多东西 </head><body> 这里有很多东西 </body></html>

如果你把额外的信息放在前面或后面,那么你就违反了 HTML 的规则。会发生什么将取决于收件人的电子邮件包的宽容程度。为了符合 HTML 的规则,您必须将额外的消息放在“<body>”和“</body>”之间的某个位置。

如果您查看几条消息,您会发现它们的差异有多大。有些是白底黑字,有些是黑底白字,中间有各种变化。无论消息的作者做了什么,您的消息都必须是可读的。我的建议是您在顶部创建一个单元格表,然后设置字体和背景颜色。尝试以下方法,然后根据您的要求进行调整:

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 回答