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

jpl*_*458 6 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
Run Code Online (Sandbox Code Playgroud)

这是发送电子邮件的电话

Call SendAMessage(emFrom, mailRs.Fields("EmailAddr").Value, _
                   emSubject, emtextBody, emAttach)
Run Code Online (Sandbox Code Playgroud)

(我收到了从网上发送电子邮件的代码,它通过我们的邮件服务器运行良好.)

在上面,在调用@之前emtextBody = Me.TextMessage我需要Me.TextMessage用html文档的地址/主体替换.消息框是ACCESS表单上的textBox.我在ACCESS中找不到任何带有html的控件.我无法使用html文档的路径,因为这会产生错误.有没有办法解决这个问题

如果需要更多信息,我会很乐意提供.

谢谢你的时间.

JPL

小智 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
Run Code Online (Sandbox Code Playgroud)


nvu*_*ono 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
Run Code Online (Sandbox Code Playgroud)