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

如何用Python从Outlook提取主题部分可变的邮件附件?

解决Outlook邮件CSV附件提取的问题

错误原因

你用glob.glob()匹配邮件主题完全用错了——这个函数是用来查找本地文件系统中符合通配符的文件路径的,根本不是做字符串模糊匹配的工具。它返回的是一个列表,哪怕找到匹配项也是列表格式,和message.Subject这个字符串做==对比永远不会成立,自然不会执行后续的附件保存操作。

修正后的代码方案

方案1:用字符串前缀匹配(简单直接)

直接检查邮件主题是否以固定的"e-mail statement [今日日期]"开头,就能匹配后面带随机数字的目标邮件:

import win32com.client as win32
from datetime import date

Date_fmt2 = date.today().strftime("%d/%m/%y")
target_subject_prefix = f"e-mail statement {Date_fmt2}"
# 替换为你的实际保存路径,用r前缀避免转义字符问题
save_path = r"C:\Your\Actual\Path\Statement " + Date_fmt2 + ".csv"

outlook = win32.Dispatch('outlook.application').GetNamespace("MAPI")
# 定位到目标文件夹
folder = outlook.Folders.Item(1).Folders.Item("Inbox").Folders.Item("Statements")
messages = folder.Items

# 遍历邮件并筛选
for message in messages:
    if message.Subject.startswith(target_subject_prefix):
        # 遍历附件,确保只保存CSV文件
        for attachment in message.Attachments:
            if attachment.FileName.endswith(".csv"):
                attachment.SaveAsFile(save_path)
                print(f"CSV附件已保存到:{save_path}")
                break  # 找到第一个CSV附件就停止,避免重复操作

方案2:用Outlook筛选器(大文件夹更高效)

如果目标文件夹里邮件数量多,用Outlook自带的Restrict方法提前筛选符合条件的邮件,比遍历所有邮件效率更高:

import win32com.client as win32
from datetime import date

Date_fmt2 = date.today().strftime("%d/%m/%y")
# Outlook的SQL筛选语法,用%匹配任意后缀
filter_str = f"@SQL=\"urn:schemas:httpmail:subject\" LIKE 'e-mail statement {Date_fmt2}%'"
save_path = r"C:\Your\Actual\Path\Statement " + Date_fmt2 + ".csv"

outlook = win32.Dispatch('outlook.application').GetNamespace("MAPI")
folder = outlook.Folders.Item(1).Folders.Item("Inbox").Folders.Item("Statements")
# 只保留符合主题条件的邮件
filtered_messages = folder.Items.Restrict(filter_str)

for message in filtered_messages:
    for attachment in message.Attachments:
        if attachment.FileName.endswith(".csv"):
            attachment.SaveAsFile(save_path)
            print(f"CSV附件已保存到:{save_path}")
            break

额外优化提示

  • 务必把代码里的C:\Your\Actual\Path\替换成你真实的保存路径
  • 如果同一天可能有多封符合条件的邮件,可以给保存文件名加序号(比如Statement 01/01/24_1.csv),避免文件被覆盖
  • 可以添加异常处理逻辑,比如检查保存路径是否存在,不存在则自动创建文件夹

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:05:31