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

