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

Python如何保存包含附件的Outlook .msg邮件文件

Python导出含完整附件的Outlook .msg文件实现方案

问题原因

调用message.SaveAs()时未显式指定保存格式参数,方法会按默认规则解析输出,不会将附件打包进生成的.msg文件,最终输出只有邮件正文、头信息的残缺文件。

正确实现代码

只要显式指定SaveAs的第二个参数为标准.msg格式对应的枚举值,就能生成和Outlook客户端手动「另存为」效果完全一致的单文件,自动包含所有外置附件、内嵌图片、邮件格式信息。

import win32com.client

# 初始化Outlook MAPI会话
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
# 示例:读取收件箱第一封邮件,可替换为你自己的邮件对象获取逻辑
inbox = outlook.GetDefaultFolder(6)  # 6对应系统默认收件箱文件夹
target_mail = inbox.Items.GetFirst()

# 定义保存的绝对路径,后缀必须为.msg
save_full_path = r"D:\EmailBackup\target_mail.msg"

# 关键调用:第二个参数传3,即OlSaveAsType.olMSG,代表标准Outlook .msg格式
target_mail.SaveAs(save_full_path, 3)

注意事项

  • 如果你的开发环境已经导入win32com的常量模块,也可以把第二个参数写为win32com.client.constants.olMSG,和直接传值3效果完全相同,不需要额外安装依赖。
  • 保存路径必须使用绝对路径,不要传入相对路径,否则可能出现保存失败、文件内容缺失的问题。
  • 遍历邮件批量保存时,不要在SaveAs执行前提前释放邮件对应的COM对象,否则会出现附件丢失、邮件内容不全的问题。
  • 生成的文件可以直接双击用Outlook打开,所有附件、正文格式、邮件头信息和原邮件完全一致,不需要额外处理附件合并逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:09:12