基于客户信息用Python自动迁移Outlook邮件至对应销售代表文件夹
实现Outlook邮件自动分类到对应销售代表文件夹
先将客户信息整理为便于快速查询的映射关系,再遍历收件箱邮件,通过发件人邮箱或正文内的客户编号匹配对应销售代表,最终完成邮件的自动归类。以下是完整实现代码:
import win32com.client as client # 初始化Outlook实例 outlook = client.Dispatch('Outlook.Application') namespace = outlook.GetNameSpace("MAPI") inbox = namespace.GetDefaultFolder(6) # 构建客户信息映射表,提升查询效率 email_to_rep = { "bob@bobsco.com": "John", "jim@jimsco.com": "Jane" } id_to_rep = { "1234": "John", "5678": "Jane" } # 获取收件箱邮件,可按需过滤(比如只处理未读邮件:inbox.Items.Restrict("[Unread] = True")) emails = inbox.Items for mail in emails: try: assigned_rep = None # 优先通过发件人邮箱匹配销售代表 sender_email = mail.SenderEmailAddress.lower() if sender_email in email_to_rep: assigned_rep = email_to_rep[sender_email] # 邮箱未匹配到的话,扫描邮件正文查找客户编号 if not assigned_rep: body = mail.Body for cust_id in id_to_rep.keys(): if cust_id in body: assigned_rep = id_to_rep[cust_id] break # 找到对应文件夹并移动邮件 if assigned_rep: try: target_folder = inbox.Folders[assigned_rep] mail.Move(target_folder) print(f"邮件已移动至{assigned_rep}的文件夹") except Exception as folder_err: print(f"未找到{assigned_rep}的文件夹:{folder_err}") except Exception as mail_err: print(f"处理邮件时出错:{mail_err}")
关键细节说明
- 映射表设计:用两个字典分别存储邮箱、客户编号到销售代表的对应关系,实现O(1)的快速查询,适配每日数百封邮件的处理效率需求。
- 匹配优先级:优先通过发件人邮箱匹配(准确率更高),避免正文扫描的冗余操作;仅当邮箱未匹配时,才检查正文内的客户编号。
- 异常处理:加入双层异常捕获,既避免单封邮件处理失败导致整个循环中断,也能及时反馈文件夹不存在的问题。
- 可选优化:可以用
Restrict方法过滤邮件,比如只处理未读邮件,减少重复处理;若客户信息较多,可将数据存在Excel/CSV中,通过pandas读取生成映射表,避免硬编码。
内容的提问来源于stack exchange,提问作者benfo
相关产品推荐
相关产品推荐

