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

如何用win32com.client获取Outlook指定发件人的最新邮件以下载附件?

获取Outlook指定发件人最新邮件并下载附件的解决方案

问题说明

需要获取Outlook中指定发件人的最新邮件并下载其附件,但原有的基于接收时间范围筛选的代码因发件时间不固定无法生效,现有代码能列出该发件人所有邮件,需优化为仅提取最新邮件的附件。

优化后的代码实现

import win32com.client as client
import os

# 连接Outlook并获取收件箱
ol_app = client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
inbox = ol_app.GetDefaultFolder(6)  # 6对应Outlook的收件箱文件夹
messages = inbox.Items

# 筛选指定发件人的邮件
target_sender = 'test@test.com'
filtered_messages = messages.Restrict(f"[SenderEmailAddress] = '{target_sender}'")

# 按接收时间降序排序,最新邮件排在首位
filtered_messages.Sort("[ReceivedTime]", True)

# 处理最新邮件的附件
if filtered_messages.Count > 0:
    latest_email = filtered_messages.Item(1)
    print(f"找到目标最新邮件:{latest_email.Subject}")

    # 设置附件保存目录,可自行修改
    save_dir = r"C:\Outlook_Attachments"
    # 确保保存目录存在,不存在则创建
    os.makedirs(save_dir, exist_ok=True)

    # 遍历并保存附件
    for att in latest_email.Attachments:
        # 处理文件名中的非法字符,避免保存失败
        safe_filename = att.FileName.replace('/', '_').replace('\\', '_').replace(':', '_')
        save_path = os.path.join(save_dir, safe_filename)
        att.SaveAsFile(save_path)
        print(f"附件已保存:{save_path}")
else:
    print(f"未找到发件人为 {target_sender} 的邮件")

关键优化点

  • 高效筛选发件人:使用Restrict方法直接过滤指定发件人的邮件,比循环遍历所有邮件效率更高,尤其适合收件箱邮件较多的场景
  • 排序取最新:通过Sort("[ReceivedTime]", True)对筛选后的邮件按接收时间降序排列,确保第一个元素就是最新收到的邮件;若需按发件时间排序,可将[ReceivedTime]替换为[SentOn]
  • 容错处理:用os.makedirs确保保存目录存在,同时对附件文件名做非法字符替换,避免因路径问题导致保存失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:47:45