如何在Python中使用通配符查找Outlook中主题含指定字符的邮件?
解决方案
你可以根据自己的匹配复杂度选以下任意一种方式实现需求:
方案1:简单模糊匹配(无需额外工具)
如果只需要替换5th为任意内容,匹配后缀为 1-33 for November的主题,直接用Python字符串的endswith方法即可:
for message in messages: # 注意win32com调用Outlook属性首字母大写,是Subject不是subject if message.Subject.endswith(" 1-33 for November"): print("Found")
如果只要主题包含1-33 for November不管前后内容,直接用in判断:
if "1-33 for November" in message.Subject:
方案2:复杂通配符规则(用正则)
如果对替换5th的内容有格式要求,比如只能是数字加后缀(1st、2nd、3rd、4th这类),可以用你已经导入的re库实现:
import re # 正则规则:数字 + 两位字母后缀 + 空格 + 固定后缀 pattern = r'\d+[a-zA-Z]{2} 1-33 for November' for message in messages: if re.search(pattern, message.Subject): print("Found")
方案3:大批量邮件高效筛选(用Outlook内置过滤)
如果收件箱邮件数量很多,遍历所有邮件效率低,可以直接用Outlook的Restrict方法做前置筛选,其中%是Outlook过滤语法的通配符:
# 过滤规则:主题包含 1-33 for November filter_rule = "@SQL=\"http://schemas.microsoft.com/mapi/proptag/0x0037001f\" LIKE '%1-33 for November%'" # 直接获取符合规则的邮件,无需遍历所有邮件 filtered_msgs = messages.Restrict(filter_rule) for msg in filtered_msgs: print("Found")
注意:代码中调用Outlook邮件的主题属性时,属性名是首字母大写的
Subject,全小写的subject可能会取不到值报错。
内容的提问来源于stack exchange,提问作者LewisThelemon
相关产品推荐
相关产品推荐

