You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA实现Outlook自动发信时签名缺失问题的解决方法咨询

问题原因

Outlook默认邮件签名仅会在执行.Display方法时自动注入到邮件的HTMLBody属性中。原有代码签名不显示的核心原因是:自定义正文直接覆盖了.Display注入的签名内容,且自定义内容的<font>标签未闭合,存在格式异常隐患。

修正方案

按以下逻辑调整代码执行顺序和正文赋值规则即可:

  • 优先执行.Display方法,触发Outlook自动加载当前发件账号绑定的默认签名
  • 执行.Display后立即读取当前HTMLBody属性值,保存已加载完成的签名内容
  • 编写自定义正文时补全所有HTML闭合标签,避免字体、段落格式错乱
  • 最终给HTMLBody赋值时,将自定义正文放在前、已保存的签名内容放在后拼接,禁止直接全量覆盖原有正文
修正后完整代码
Sub mail_outlook()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String
    Dim signature As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .SentOnBehalfOfName = "xxxxxxxxxxxxxxxxxx"
        ' 先触发显示,让Outlook自动注入默认签名
        .Display
        ' 保存已加载完成的签名内容
        signature = .HTMLBody
        
        .To = "xxxxxxxxxxxxxxxxxx"
        .CC = "xxxxxxxxxxxxxxxxxx"
        .BCC = ""
        .Subject = "Report"
        
        ' 自定义正文,补全font闭合标签
        strbody = "<font style=""font-family: Calibri; font-size: 11pt;"">Hello,<p>Please find in attachment the Report.<p>We remain available should you have any questions.</font>"
        ' 拼接正文和签名,不覆盖原有签名内容
        .HTMLBody = strbody & signature
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub
补充说明

如果需要指定使用非默认签名,不需要依赖.Display自动注入,可以直接读取本地AppData\Roaming\Microsoft\Signatures路径下对应签名的htm文件内容,直接拼接到正文末尾即可。

内容的提问来源于stack exchange,提问作者HelpMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:39:15