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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:40:21