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
相关产品推荐
相关产品推荐

