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

