我为我的组织编写了一个电子邮件程序,处理了一些非常专业的东西,我可以使用Outlook或Gmail。现在,经理想偶尔向我们的小客户群发送电子邮件,但我希望电子邮件正文看起来很专业而不是作为附件发送。我拼凑了一个html文档,该文档存在于所有浏览器中并且已经过验证。我的问题是我无法弄清楚如何将消息体指向html文档。这是重要的代码。
这是所有设置的地方:
Do While mailRs.EOF = False
'Me.AttachDoc = "C:\EmailFolder\CouponForm.pdf"
emTo = mailRs.Fields("EmailAddr").Value
emFrom = "SportsParkInfo@skokieparks.org"
emSubject = Me.Subject
emtextBody = Me.TextMessage
以下是发送电子邮件的致电
Call SendAMessage(emFrom, mailRs.Fields("EmailAddr").Value, _
emSubject, emtextBody, emAttach)
(我收到了从网上发送电子邮件的代码,它通过我们的邮件服务器运行良好。)
在上面,在调用@ emtextBody = Me.TextMessage
之前,我需要将Me.TextMessage
替换为html文档的地址/正文。消息框是ACCESS表单上的textBox。我无法在ACCESS中找到任何带有html的控件。我无法使用html文档的路径,因为这会产生错误。有没有办法绕过这个
如果需要更多信息,我很乐意提供。
感谢您的时间。
jpl
答案 0 :(得分:8)
使用类似下面的代码。我已经包含了附件和html格式的元素,但是你可以在vba中编写的任何内容也可以在vba中完成。
Sub SharePerformance()
Dim OutApp As Object
Dim OutMail As Object
Dim rng As Range
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.createitem(0)
'& "<a href=""\\server\folder"">\\server\folder</a>" &
msg1 = "Team,<br><br><b><DL>" & Range("b5").Value & "</b><br><ul><b><u>" & Range("b6").Value & "</b></u>"
msg1 = msg1 & "<DT><a HREF=C:\USER\Desktop\File1.xlsb>"
msg1 = msg1 & Range("b7").Value & "</a><br>"
msg1 = msg1 & "<b><u>" & Range("b9").Value & "</b></u></DL><br><br>"
msg1 = msg1 & "<p><img src=file://" & "C:\temp\Chart1.png" & "></p>" & "<br>"
On Error Resume Next
' Change the mail address and subject in the macro before you run it.
With OutMail
.To = Range("B1").Value
.cc = ""
.BCC = ""
.Subject = Range("B3").Value
.HTMLBody = msg1
'.Attachments.Add ActiveWorkbook.FullName
'.Attachments.Add ("C:\temp\Chart1.png")
'.Attachments.Add ("C:\temp\Chart2.png")
.display
End With
SendKeys "^{ENTER}"
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
答案 1 :(得分:0)
我无法分辨你正在使用的SendAMessage
函数中的代码是什么,但我使用过的所有VBA示例似乎与CDO.Message对象的工作方式相同,就像在这个MS知识库中一样文章KB286431。在某些时候,SendAMessage
将有一行将消息对象的.TextBody
值指定为等于您传入的emtextBody
参数。
一种解决方案可能是将您的SendAMessage函数复制到新函数SendAMessageHTML中,并替换他们设置someMessage.TextBody = emtextBody
的行,以便您设置someMessage.HTMLBody = emtextBody
假设您的文本框中包含"<html><head><body></body></html>"
行的文本,您可以修改现有函数以执行这样的天真检查:
if Left(UCase(emtextBody),6) = "<HTML>" then
someMessage.HTMLBody = emtextBody
else
someMessage.TextBody = emtextBody
end if