使用Python下载带附件的Outlook .msg格式邮件可行吗?
可以用Python将带附件的Outlook邮件保存为单个.msg文件
完全可以实现,通过调用Outlook的COM接口直接保存原生.msg文件,该格式会自动包含邮件内容和所有附件,生成单个文件。以下是具体实现方案:
方法:使用pywin32操作Outlook COM对象
pywin32库可以直接与Windows系统上的Outlook客户端交互,调用邮件对象的原生SaveAs方法即可保存包含附件的.msg文件。
步骤1:安装依赖
pip install pywin32
步骤2:示例代码
import win32com.client import os def save_email_with_attachments_as_msg(mail_item, save_dir): # 处理邮件主题中的非法字符,避免路径报错 safe_subject = mail_item.Subject.replace('/', '_').replace('\\', '_').replace(':', '_').replace('*', '_').replace('?', '_').replace('"', '_').replace('<', '_').replace('>', '_').replace('|', '_') save_path = os.path.join(save_dir, f"{safe_subject}.msg") # olMSG 对应常量3,指定保存为MSG格式 mail_item.SaveAs(save_path, 3) return save_path # 初始化Outlook应用 outlook_app = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") # 获取目标文件夹(示例为收件箱,6是收件箱的常量值) target_folder = outlook_app.GetDefaultFolder(6) # 遍历邮件并保存(示例筛选带附件的邮件) for mail in target_folder.Items: if mail.Attachments.Count > 0: saved_path = save_email_with_attachments_as_msg(mail, "C:/Outlook_Saved_Mails") print(f"带附件的邮件已保存至: {saved_path}") # 可根据需求修改为遍历所有邮件或指定条件筛选 break
关键说明
- 该方法依赖本地安装的Outlook客户端,因为需要调用其COM服务
- 保存的.msg文件是Outlook原生格式,打开后可直接查看邮件内容和所有附件,无需分开存储
- 首次运行时Outlook可能会弹出权限验证窗口,需允许程序访问邮件数据
- 代码中处理了邮件主题的非法字符,避免因路径包含特殊字符导致保存失败
内容的提问来源于stack exchange,提问作者Wizkidbrz
相关产品推荐
相关产品推荐

