Python如何通过循环为指定Outlook邮件添加颜色分类?
需求背景
我需要基于邮件主题、发件人地址等条件,为指定Outlook文件夹中的现有邮件添加颜色分类。目前已编写代码实现读取Excel存储的匹配规则、遍历目标文件夹邮件、将主题命中关键词的邮件移动到对应目标文件夹的功能,但暂时无法实现添加Outlook颜色分类的功能,参考官方Outlook VBA Categories接口文档仍未找到解决方案,请问如何实现该需求?
现有代码
import win32com.client as client import win32com import pandas as pd outlook = client.Dispatch("Outlook.Application").GetNamespace('MAPI') main_account = outlook.Folders.Item(1) second_account = outlook.Folders.Items(3) df = pd.read_excel (r'C:\Python\test.xls') df_outlook_folder = df['Outlook_folder'].tolist() df_mail_object = df['Mail_object'].tolist() out_iter_folder = main_account.Folders['Inbox'].Folders['TEST'] fixed_item_count = out_iter_folder.Items.Count item_count = out_iter_folder.Items.Count if out_iter_folder.Items.Count > 0: for i in reversed(range(0,item_count)): message = out_iter_folder.Items[i] for y,z in zip(df_mail_object,df_outlook_folder): try: if y in message.Subject: message.Move(second_account.Folders['Inbox'].Folders['TESTED'].Folders[z]) except: pass item_count = out_iter_folder.Items.Count print('Nb mails sorted:',fixed_item_count - item_count)
(注:原代码存在笔误yout_iter_folder、Move方法缺右括号,已修正)
解决方案
你之前参考的Categories接口是用于管理整个Outlook账户的全局分类列表的,给单封邮件添加分类不需要调用这个接口,直接操作邮件对象的Categories属性即可,具体逻辑如下:
- 提前在你使用的Outlook账户中创建好需要的颜色分类,记住分类的准确名称(大小写、标点完全匹配)
- 给邮件对象的
Categories属性赋值,单分类直接填分类名称,多分类用英文逗号分隔 - 赋值后必须调用邮件对象的
Save()方法保存修改,否则设置不会生效
如果需要在移动邮件的同时添加分类,修改匹配到规则后的代码段即可,示例如下:
if y in message.Subject: # 给邮件添加分类,分类名替换为你自己的即可 message.Categories = "已自动归档" # 保存修改 message.Save() # 移动邮件 message.Move(second_account.Folders['Inbox'].Folders['TESTED'].Folders[z])
如果需要按不同规则匹配不同分类,可以在Excel的规则表中新增一列存储对应分类名称,读取后和关键词、目标文件夹一起遍历赋值即可。
内容的提问来源于stack exchange,提问作者Matarus
相关产品推荐
相关产品推荐

