如何在Python中正确使用Outlook.Items.Restrict过滤含指定词的邮件
使用pywin32筛选Outlook主题包含特定词汇的正确方式
你当前代码的问题在于用了=操作符搭配通配符,Outlook的Restrict方法不支持这种写法来匹配包含关系。要筛选主题包含特定词汇的邮件,需要改用Like操作符。
基础写法
直接使用Outlook的DAV搜索语法,用Like搭配通配符*:
criteria = "sample" search_criteria = f"[Subject] Like '*{criteria}*'" emails = target_folder.Items.Restrict(search_criteria)
这里的*可以匹配任意长度的字符(包括空字符),表示主题中任意位置包含sample的邮件都会被筛选出来。
进阶SQL语法写法
如果需要更精细的控制(比如区分大小写),可以使用@SQL=前缀的SQL语法筛选:
criteria = "sample" # 默认不区分大小写 search_criteria = f"@SQL=\"urn:schemas:httpmail:subject\" LIKE '%{criteria}%'" # 强制区分大小写 search_criteria = f"@SQL=\"urn:schemas:httpmail:subject\" LIKE '%{criteria}%' COLLATE Latin1_General_CS_AS"
这种写法使用了Exchange的SQL查询语法,urn:schemas:httpmail:subject是主题字段的标准命名空间,COLLATE子句用来指定大小写规则(CS表示区分大小写,CI表示不区分)。
内容的提问来源于stack exchange,提问作者César Baylina Delgado
相关产品推荐
相关产品推荐

