如何使用 Outlook 在电子邮件正文中发送 HTML 附件,包括 (hyper)link
How to send HTML attachment including (hyper)link in email-body with Outlook
场景:
从带有选定记录集的 Access 表单中,报表中填充了数据,通过 VBA 将其转换为 HTML 格式并通过 Outlook 发送。然后内容在收件人的电子邮件正文中显示为 HTML。这包含指向此表单中的记录集的 link。因此,假设收件人也有 ACCESS 和完全相同的数据库(以及相同的位置和内容),link 将在单击时打开他的数据库文件,然后打开表单,然后使用查询打开该确切记录。
基于此...
...我使用此内容在我的报告中添加了一个文本字段并将其标记为 hyperlink:
Click here#C:\MainDatabase.accdb#Query frmForm01
点击report works中的hyperlink(打开Access & file),本地存储的HTML-tempfile中的link也可以。
问题:
虽然 link 已发送,但在收件人电子邮件正文中也显示为 link“单击此处”,但显示的 link 不可单击,只是带蓝色下划线的文字!
经过大量试验,我发现都是 Outlook! link 在发送前的 Outlook 邮件正文预览中是完整的....它必须是将 link 转换为文本 during/for 发送的 Outlook 设置。在 Outlook 菜单中,我已经检查了格式设置:转换为 HTML 就可以了!(不是纯文本)。那么还有什么原因呢??
非常感谢您提供解决方案。谢谢!
我的代码:
Sub CreateHTMLMail()
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Dim FSO As Object
Dim AttchFile As String, EmailTo As String, strSig As String
Set OutApp = New Outlook.Application
Set OutMail = OutApp.CreateItem(olMailItem)
AttchFile = "C:\AttachmTemp.htm"
EmailTo = "abcd@efgh.com"
DoCmd.OpenReport "NewReport", acViewReport, , "[ID]='" & Me.ID & "'", acHidden
DoCmd.OutputTo acOutputReport, "NewReport", acFormatHTML, AttchFile
Set FSO = CreateObject("Scripting.FileSystemObject")
strSig = FSO.OpenTextFile(AttchFile).ReadAll
With OutMail
.TO = EmailTo
.Subject = "New Message"
.BodyFormat = olFormatHTML
.HTMLBody = strSig
.send
End With
End If
Kill AttchFile
Set OutApp = Nothing
Set OutMail = Nothing
End Sub
我使用自定义 URL 协议处理程序来执行此操作。
首先,创建(并在测试后分发)一个 .reg 文件,如下所示(将 myapp
替换为您的应用程序名称):
Windows Registry Editor Version 5.00
; Andre, 2019
[HKEY_CLASSES_ROOT\myapp]
@="URL:myapp-Open"
"URL Protocol"=""
"EditFlags"=hex:02,00,00,00
[HKEY_CLASSES_ROOT\myapp\DefaultIcon]
@="C:\path\myapp\myapp.ico"
[HKEY_CLASSES_ROOT\myapp\shell]
@="open"
[HKEY_CLASSES_ROOT\myapp\shell\open]
[HKEY_CLASSES_ROOT\myapp\shell\open\command]
; using a .vbs to start my app
; @="wscript C:\path\myapp\Startmyapp.vbs \"%1\""
; (untested) starting Access directly, needs the /cmd switch
@="\"C:\Program Files (x86)\Microsoft Office\Office16\msaccess.exe\" C:\path\myapp\Myapp.accde /cmd \"%1\""
; If you use Outlook, prevent the Security warning
;
; Note: the whole subtree starting with (at least) "Security" will be created.
; This path is for Office 2016.
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Office.0\Common\Security\Trusted Protocols\All Applications\myapp:]
请注意,我使用 .vbs 脚本启动我的 Access 应用程序,它应该与 msaccess.exe 的路径以及您的本地前端一起工作。
查看 myapp\shell\open\command
中的评论
然后在您的 HTML 电子邮件中,使用这样的 URL:
url:myapp:ID:2357
ID:2357
将作为命令行参数传递给您的应用程序。
请参阅 了解如何读取此字符串,然后在您的 Autoexec 函数中解析它并打开您的表单。
要对此进行测试,只需在 Start/Run 或 Cmd window 中键入 myapp:ID:2357
。
场景:
从带有选定记录集的 Access 表单中,报表中填充了数据,通过 VBA 将其转换为 HTML 格式并通过 Outlook 发送。然后内容在收件人的电子邮件正文中显示为 HTML。这包含指向此表单中的记录集的 link。因此,假设收件人也有 ACCESS 和完全相同的数据库(以及相同的位置和内容),link 将在单击时打开他的数据库文件,然后打开表单,然后使用查询打开该确切记录。
基于此...
...我使用此内容在我的报告中添加了一个文本字段并将其标记为 hyperlink:
Click here#C:\MainDatabase.accdb#Query frmForm01
点击report works中的hyperlink(打开Access & file),本地存储的HTML-tempfile中的link也可以。
问题:
虽然 link 已发送,但在收件人电子邮件正文中也显示为 link“单击此处”,但显示的 link 不可单击,只是带蓝色下划线的文字!
经过大量试验,我发现都是 Outlook! link 在发送前的 Outlook 邮件正文预览中是完整的....它必须是将 link 转换为文本 during/for 发送的 Outlook 设置。在 Outlook 菜单中,我已经检查了格式设置:转换为 HTML 就可以了!(不是纯文本)。那么还有什么原因呢??
非常感谢您提供解决方案。谢谢!
我的代码:
Sub CreateHTMLMail()
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Dim FSO As Object
Dim AttchFile As String, EmailTo As String, strSig As String
Set OutApp = New Outlook.Application
Set OutMail = OutApp.CreateItem(olMailItem)
AttchFile = "C:\AttachmTemp.htm"
EmailTo = "abcd@efgh.com"
DoCmd.OpenReport "NewReport", acViewReport, , "[ID]='" & Me.ID & "'", acHidden
DoCmd.OutputTo acOutputReport, "NewReport", acFormatHTML, AttchFile
Set FSO = CreateObject("Scripting.FileSystemObject")
strSig = FSO.OpenTextFile(AttchFile).ReadAll
With OutMail
.TO = EmailTo
.Subject = "New Message"
.BodyFormat = olFormatHTML
.HTMLBody = strSig
.send
End With
End If
Kill AttchFile
Set OutApp = Nothing
Set OutMail = Nothing
End Sub
我使用自定义 URL 协议处理程序来执行此操作。
首先,创建(并在测试后分发)一个 .reg 文件,如下所示(将 myapp
替换为您的应用程序名称):
Windows Registry Editor Version 5.00
; Andre, 2019
[HKEY_CLASSES_ROOT\myapp]
@="URL:myapp-Open"
"URL Protocol"=""
"EditFlags"=hex:02,00,00,00
[HKEY_CLASSES_ROOT\myapp\DefaultIcon]
@="C:\path\myapp\myapp.ico"
[HKEY_CLASSES_ROOT\myapp\shell]
@="open"
[HKEY_CLASSES_ROOT\myapp\shell\open]
[HKEY_CLASSES_ROOT\myapp\shell\open\command]
; using a .vbs to start my app
; @="wscript C:\path\myapp\Startmyapp.vbs \"%1\""
; (untested) starting Access directly, needs the /cmd switch
@="\"C:\Program Files (x86)\Microsoft Office\Office16\msaccess.exe\" C:\path\myapp\Myapp.accde /cmd \"%1\""
; If you use Outlook, prevent the Security warning
;
; Note: the whole subtree starting with (at least) "Security" will be created.
; This path is for Office 2016.
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Office.0\Common\Security\Trusted Protocols\All Applications\myapp:]
请注意,我使用 .vbs 脚本启动我的 Access 应用程序,它应该与 msaccess.exe 的路径以及您的本地前端一起工作。
查看 myapp\shell\open\command
然后在您的 HTML 电子邮件中,使用这样的 URL:
url:myapp:ID:2357
ID:2357
将作为命令行参数传递给您的应用程序。
请参阅
要对此进行测试,只需在 Start/Run 或 Cmd window 中键入 myapp:ID:2357
。