我正在尝试转发我收到的电子邮件,并在其上添加其他消息。我写的以下代码有点这样做,但我丢失了原始邮件的所有格式。有没有办法维护原始邮件的格式,并且能够在电子邮件中附加额外的测试?
我的代码:
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是用简单的文字写的,我丢失了所有的格式。
答案 0 :(得分: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>
这里有很多东西
< /头> <身体GT;
这里有很多东西
< /体> < / 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)