我认为 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)