如何使用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
相关产品推荐
相关产品推荐

