如何使用 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