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

如何用Python自动转发Outlook中今日指定发件人带附件的邮件

Outlook自动转发指定邮件实现方案

要实现自动转发今日从invoice@email.com收到的带附件邮件,你需要用Outlook对象模型的Restrict方法来筛选符合条件的邮件,而不是直接调用inbox.Items()。以下是具体实现步骤和修改后的代码:

核心筛选逻辑

需要同时满足三个条件:

  • 邮件今日接收:筛选ReceivedTime在今日00:00到23:59之间的邮件
  • 发件人为指定邮箱:SenderEmailAddress等于invoice@email.com
  • 邮件带有附件:HasAttachments为True

Outlook的筛选语法需要遵循其特定格式,多个条件用AND连接,日期格式需为mm/dd/yyyy。

修改后的完整代码

import win32com.client
import datetime as dt

# 初始化Outlook对象
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)  # 6代表收件箱

# 构建今日日期范围
today = dt.datetime.now().strftime("%m/%d/%Y")
start_of_day = f"{today} 00:00 AM"
end_of_day = f"{today} 11:59 PM"

# 构建筛选条件
filter_str = f"""
    [ReceivedTime] >= '{start_of_day}' AND 
    [ReceivedTime] <= '{end_of_day}' AND 
    [SenderEmailAddress] = 'invoice@email.com' AND 
    [HasAttachments] = True
"""

# 应用筛选条件,同时按接收时间排序避免遗漏
messages = inbox.Items.Restrict(filter_str)
messages.Sort("[ReceivedTime]", win32com.client.constants.olAscending)

# 遍历符合条件的邮件并转发
for message in messages:
    try:
        forward_msg = message.Forward()
        forward_msg.Body = message.Body
        forward_msg.Subject = message.Subject
        forward_msg.To = "Remas@email.com"
        # 测试阶段可以注释掉Send,确认后取消注释
        # forward_msg.Send()
        print(f"已转发邮件:{message.Subject}")
    except Exception as e:
        print(f"转发邮件出错:{str(e)}")

关键说明

  • Restrict方法:用于从收件箱中过滤出符合条件的邮件,避免遍历所有邮件提升效率
  • 日期格式:必须使用Outlook识别的mm/dd/yyyy hh:mm AM/PM格式
  • 排序:对筛选后的邮件按接收时间排序,确保不会重复处理或遗漏
  • 异常捕获:添加try-except块处理转发过程中可能出现的错误(比如邮件已被删除等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:25:16