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

如何使用Excel VBA确保修改后的Outlook邮件保存为HTML格式.msg文件

解决方案

偶发格式回退是Outlook默认的格式优先级机制导致:操作过程中如果触发了纯文本格式相关的调用(比如误操作Body属性、收件人地址存在不支持HTML的格式标记),Outlook会自动将邮件格式切换为纯文本,且SaveAs方法不会主动恢复模板原有格式。

直接在保存前强制指定邮件格式为HTML即可,修正后代码如下:

Dim oOutlookApp As Outlook.Application
Dim oItem As Outlook.MailItem
Dim tempHTMLBody As String ' 新增临时变量存HTML内容,避免误改
Set oOutlookApp = GetObject(, "Outlook.Application")
Set oItem = oOutlookApp.CreateItemFromTemplate(TheTemplateLocation)
' 加载模板后先暂存原始HTML内容
tempHTMLBody = oItem.HTMLBody

'''''你的修改操作
'''''注意:所有正文修改都操作tempHTMLBody变量,不要直接改oItem.Body,修改完成后赋值回去
oItem.HTMLBody = tempHTMLBody

' 保存前强制指定格式为HTML
oItem.BodyFormat = olFormatHTML
oItem.SaveAs SaveToLocation, olMSGUnicode
oItem.Close olDiscard
Set oItem = Nothing

额外注意事项

  • 不要直接操作MailItem.Body属性,只要调用这个属性读取/写入,Outlook会自动将邮件格式切换为纯文本,所有正文修改都通过HTMLBody属性完成
  • 如果使用的是2016及更早版本的Outlook,可在SaveAs前加一行oItem.Save,如果担心生成草稿,可在保存完本地msg后追加删除草稿的逻辑:
    Dim draftEntryID As String
    draftEntryID = oItem.EntryID
    oItem.SaveAs SaveToLocation, olMSGUnicode
    oOutlookApp.Session.GetItemFromID(draftEntryID).Delete
    
  • 如果修改内容包含插入附件、修改收件人等操作,所有操作完成后再统一赋值HTMLBody和BodyFormat,避免后续操作触发格式回退

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:36:00