Access中用VBA创建带正文与Outlook签名的邮件问题
解决Access VBA发送Outlook邮件时签名不显示的问题
直接赋值.Body会完全覆盖Outlook自动生成的邮件内容(包括默认签名),这就是设置正文后签名消失的原因。以下是两种实用解决方案:
方法一:利用HTMLBody拼接正文与签名(推荐)
Outlook签名通常为HTML格式,先让Outlook自动加载签名,再将自定义正文拼到签名前:
With objOutlookMsg Set objOutlookRecip = .Recipients.Add("test@web.de") objOutlookRecip.Type = olTo .Subject = "Verwaltungsgebühr " ' 触发Outlook加载签名,必须先执行Display .Display .WindowState = olMinimized ' 可选:最小化邮件窗口,避免弹窗干扰 ' 将纯文本正文转为HTML格式 Dim customHtml As String customHtml = "<p>" & Replace(Anredeemail, vbCrLf, "<br>") & "</p>" & _ "<p>anbei erhalten Sie unsere Verwaltungskostenrechnung.</p>" & _ "<p>Mit freundlichen Grüßen</p>" ' 把自定义正文加到签名HTML的前面 .HTMLBody = customHtml & .HTMLBody .Importance = olImportanceNormal .Attachments.Add strDatei .Send End With
方法二:读取本地签名文件拼接纯文本正文
如果签名是纯文本格式,可直接读取本地签名文件内容拼到正文末尾:
' 读取本地签名文件内容 Dim signatureText As String Dim signaturePath As String signaturePath = Environ("APPDATA") & "\Microsoft\Signatures\" ' 替换为你的实际签名文件名(可在上述路径中查看) Open signaturePath & "Standard.txt" For Input As #1 signatureText = Input$(LOF(1), 1) Close #1 With objOutlookMsg Set objOutlookRecip = .Recipients.Add("test@web.de") objOutlookRecip.Type = olTo .Subject = "Verwaltungsgebühr " ' 拼接自定义正文与签名 .Body = Anredeemail & vbCrLf & vbCrLf & _ "anbei erhalten Sie unsere Verwaltungskostenrechnung." & vbCrLf & vbCrLf & _ "Mit freundlichen Grüßen" & vbCrLf & vbCrLf & _ signatureText .Importance = olImportanceNormal .Attachments.Add strDatei .Send End With
注意事项
- 确保Outlook已设置默认签名,否则
.Display也无法加载签名 - 方法一适配带格式的签名,方法二仅适用于纯文本签名
内容的提问来源于stack exchange,提问作者user3464366
相关产品推荐
相关产品推荐

