使用Python保存带附件的Outlook邮件为EML文件遇问题求助
解决Outlook保存EML文件为空的问题
问题原因
Outlook的SaveAs方法使用格式9(olMSGUnicode)保存时,可能因邮件对象未完成初始化、未关联完整MAPI上下文,或附件路径无效,导致生成的EML文件内容为空。
修复方案
1. 确保附件路径为绝对路径
检查file_path是否为完整绝对路径,相对路径会导致Outlook无法定位附件,间接影响邮件保存完整性。
2. 修改保存逻辑:先存草稿再导出EML
先将邮件保存到草稿箱完成对象初始化,再用正确格式导出EML:
def save_mail(): outlook = win32.Dispatch("Outlook.Application") olNs = outlook.GetNamespace("MAPI") mail = outlook.CreateItem(0) mail.To = "email@email.com" mail.Subject = "TEST TEST" mail.HTMLBody = "<p>TEST HTML</p>" # 替换为实际绝对路径 attachment = file_path mail.Attachments.Add(attachment) # 先保存到草稿箱完成初始化 mail.Save() # 使用olEML格式(编号4)导出为.eml文件 mail.SaveAs(path_file + '.eml', 4) # 可选:从草稿箱删除临时邮件 mail.Delete() save_mail()
3. 检查Outlook配置
确保Outlook已登录默认邮箱账号,MAPI命名空间正常加载,未登录或配置异常也会导致保存失败。
关键说明
- 格式编号
4对应olEML,是直接导出EML文件的正确参数,而非原代码中的9(olMSGUnicode,适用于MSG格式)。 - 调用
mail.Save()将邮件存入草稿箱,能让Outlook完成邮件对象的所有初始化操作,避免保存时内容缺失。
内容的提问来源于stack exchange,提问作者Łukasz Obiedziński
相关产品推荐
相关产品推荐

