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

如何使用Python下载Outlook邮件中的全部附件?

如何用Python下载Outlook特定邮件的所有附件

我来帮你搞定这个问题!你的需求是把特定主题邮件里的所有附件下载到本地,先看看你原代码里的几个小问题,再给你修正后的完整方案。

原代码里的问题

  • get_path被注释掉了,运行时会报变量未定义的错误
  • 循环里错误地使用了外部的message变量,而非当前遍历到的m,导致始终在处理第一封邮件
  • 只保存了第一个附件,没有遍历所有附件
  • 冗余的GetNext()调用,for循环已经能自动遍历邮件集合了

修复后的完整代码

import win32com.client
import os

# 连接到Outlook客户端
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
# 获取收件箱文件夹(6是Outlook收件箱的固定索引)
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items

# 替换成你想要保存附件的本地路径
save_path = 'C:\\Users\\test\\Desktop\\resumes'

# 确保保存路径存在,不存在就创建
if not os.path.exists(save_path):
    os.makedirs(save_path)

# 你要匹配的邮件主题
target_subject = "FW: Opportunity with Mindtree | Automotive Infotainment |"

# 遍历收件箱里的所有邮件
for msg in messages:
    # 找到主题匹配的邮件
    if msg.Subject == target_subject:
        print(f"找到目标邮件:{msg.Subject}")
        # 遍历这封邮件的所有附件
        for attachment in msg.Attachments:
            # 拼接附件的完整保存路径
            full_save_path = os.path.join(save_path, attachment.FileName)
            # 保存附件到本地
            attachment.SaveAsFile(full_save_path)
            print(f"附件 {attachment.FileName} 已成功保存到:{full_save_path}")

代码说明

  • 路径处理:添加了路径检查和创建逻辑,避免因路径不存在导致保存失败;路径可以用双反斜杠\\或者原始字符串r'C:\Users\test\Desktop\resumes'
  • 邮件遍历:用for循环直接遍历messages集合,更简洁可靠,不需要手动调用GetNext()
  • 附件遍历:通过for attachment in msg.Attachments遍历所有附件,确保不会遗漏任何一个
  • 调试信息:添加了打印语句,方便你跟踪每一步的执行情况

额外注意事项

  • 运行代码前确保Outlook客户端已经打开,并且你的系统安装了Outlook(win32com库依赖Outlook客户端)
  • 如果有多个相同主题的邮件,这个代码会处理所有匹配的邮件;如果只想处理最新的一封,可以在遍历前给邮件排序:
    # 按接收时间降序排序,最新的邮件排在最前面
    messages.Sort("[ReceivedTime]", True)
    
  • 如果遇到权限问题,检查保存路径是否有写入权限,或者换一个有权限的路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:31:40