如何用Python检测邮件主题含指定关键词后转发初始自动化邮件
问题解决:Outlook邮件自动检测回复并转发
需求说明
通过Python发送主题为「Daily Test Results are completed and please find the Test Results」的自动化邮件后,需完成以下操作:
- 等待并检索回复邮件,回复邮件主题需包含后缀
CHECK OK、VERIFIED、SEND、PASS_SEND中的任意一个(示例主题:「Daily Test Results are completed and please find the Test Results - CHECK OK」) - 收到符合要求的回复后,将最初发送的原邮件转发给指定的多个用户
当前存在的问题
- 仅能设置单个关键词匹配回复邮件主题,无法使用关键词列表进行多条件匹配
- 已能匹配到目标回复邮件,但不知道如何找到并转发最初发送的原邮件
解决方案与完整代码
1. 多关键词匹配实现
定义关键词列表,通过any()函数判断邮件主题是否包含列表中的任意一个关键词,同时结合原邮件主题前缀判断,避免误匹配无关邮件。
2. 找到原邮件并转发
- 原邮件默认保存在「已发送邮件」文件夹(Outlook中对应索引为
5) - 通过原邮件主题精确匹配定位(可结合发送时间、收件人等条件提高准确性)
- 使用Outlook的
Forward()方法创建转发邮件,批量添加收件人后发送
import win32com.client as win32 # 配置参数 ORIGINAL_SUBJECT = "Daily Test Results are completed and please find the Test Results" REPLY_KEYWORDS = ["CHECK OK", "VERIFIED", "SEND", "PASS_SEND"] FORWARD_RECIPIENTS = ["user1@example.com", "user2@example.com"] # 替换为实际转发目标用户 def check_reply_and_forward(): # 初始化Outlook客户端 outlook = win32.Dispatch('Outlook.Application').GetNameSpace('MAPI') # 筛选收件箱中符合要求的回复邮件 inbox = outlook.GetDefaultFolder(6) valid_replies = [ msg for msg in inbox.Items if ORIGINAL_SUBJECT in msg.Subject and any(keyword in msg.Subject for keyword in REPLY_KEYWORDS) ] if not valid_replies: print("未找到符合要求的回复邮件") return # 定位已发送邮件中的原邮件 sent_folder = outlook.GetDefaultFolder(5) original_mail = None for msg in sent_folder.Items: if msg.Subject == ORIGINAL_SUBJECT: original_mail = msg break if not original_mail: print("未找到需要转发的原邮件") return # 执行转发操作 forward_mail = original_mail.Forward() # 批量添加收件人 for recipient in FORWARD_RECIPIENTS: forward_mail.Recipients.Add(recipient) # 可选:添加转发备注 # forward_mail.Body = "测试结果已确认,转发给相关人员查看\n" + forward_mail.Body forward_mail.Send() print("原邮件已成功转发给指定用户") if __name__ == '__main__': check_reply_and_forward()
代码关键说明
ORIGINAL_SUBJECT:原邮件的精确主题,用于定位原邮件和过滤回复邮件REPLY_KEYWORDS:需匹配的回复后缀关键词列表,any()函数实现多条件命中判断sent_folder = outlook.GetDefaultFolder(5):Outlook中「已发送邮件」文件夹的固定索引original_mail.Forward():生成原邮件的转发副本,可修改收件人、正文等内容forward_mail.Recipients.Add():逐个添加转发目标用户,支持批量配置
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

