【问题标题】:Sending html email from VBA email program从 VBA 电子邮件程序发送 html 电子邮件
【发布时间】:2015-06-07 18:12:32
【问题描述】:

我为我的组织编写了一个电子邮件程序,它可以很好地处理一些非常专业的事情,我可以使用 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 表单上的一个文本框。我在 ACCESS 中找不到任何需要 html 的控件。我不能使用 html 文档的路径,因为这会产生错误。有没有办法解决这个问题

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

感谢您的宝贵时间。

jpl

【问题讨论】:

  • VBA 对较新邮件格式的支持可能受到限制。在 VB.NET 中,我认为有两种 bodyFormats - 文本和 HTML。使用 .NET 应用程序可能会更好。您还应该提供纯文本选项 - 一些用户将他们的偏好设置为纯文本,而一些公司限制 HTML 格式的电子邮件。

标签: html vba


【解决方案1】:

我不知道您正在使用的 SendAMessage 函数里面有什么代码,但我使用过的所有 VBA 示例似乎都与 CDO.Message 对象的工作方式相同,就像这篇 MS 知识库文章 @ 987654321@。在某些时候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

【讨论】:

  • 我以上建议:
  • 在上述建议中,如果 html 文档是文件夹,我该如何处理。
  • 对胖手指感到抱歉。您写了一种解决方案可能是将您的 SendAMessage 函数复制到一个新函数 SendAMessageHTML 中,并替换他们设置 someMessage.TextBody = emtextBody 的行,以便您设置 someMessage.HTMLBody = emtextBody。假设 html 文档在一个文件夹中; HTMLBody = c:\htmlDocs\EmailDoc.html。我该怎么做?
  • 您可以找到一些 VBA 代码来将该 C:\htmlDocs\EmailDoc.html 文件读入字符串变量,然后设置您的 .HTMLBody = myStringVariable
  • 问题是html文档包含图形图像。您可以将包含 .jpg 图片的 html 文档转换为字符串变量吗?另外,如果将html转换为字符串变量,发送后如何将其读取为电子邮件。我在这里处于未知领域,至少对我来说是这样。感谢您的宝贵时间。
【解决方案2】:

使用类似下面的代码。我已经包含了附件元素以及 html 格式,但几乎任何你可以用 html 编写的东西也可以在 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

【讨论】:

  • 我的代码是为 ACCESS 10 编写的,我假设上面的代码是为 Excel 编写的。还假设 msg1 包含 html。我的 html 文档有 100 多行。不使用 Outlook。仍在苦苦挣扎,但感谢 jbay。
  • 是的,但是在从引用中选择 microsoft excel 对象库并将单元格引用更改为指向其他位置后,我能够在访问中使用完全相同的代码。行数无关紧要。
猜你喜欢
  • 2018-05-10
  • 1970-01-01
  • 2015-05-03
  • 2011-03-30
  • 1970-01-01
  • 2012-08-22
  • 2011-03-26
  • 2011-03-04
相关资源
最近更新 更多