从VBA电子邮件程序发送HTML电子邮件

时间:2015-04-02 17:26:15

标签: html vba

我为我的组织编写了一个电子邮件程序,处理了一些非常专业的东西,我可以使用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

2 个答案:

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