如何用Python的win32com获取Outlook垃圾邮件中发件人部门
解决方案
要获取Outlook垃圾邮件中发件人的部门信息,你需要修正几个关键问题,以下是可行的解决方法:
问题分析
- 手动构造收件人的方式不可靠,垃圾邮件的发件人地址格式可能不符合预期,导致无法正确解析
- 错误调用了
GetExchangeUserManager()方法,这是获取上级主管的接口,并非部门属性 - 未处理发件人非Exchange内部用户的情况(垃圾邮件常见外部发件人)
修正后的代码
import win32com.client from pathlib import Path output_dir = Path.cwd() / "Output" output_dir.mkdir(parents=True, exist_ok=True) outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") inbox = outlook.GetDefaultFolder(23) # 23对应垃圾邮件文件夹 messages = inbox.Items num = 0 for message in messages: target_folder = output_dir / str(num) target_folder.mkdir(parents=True, exist_ok=True) # 保存发件人姓名 Path(target_folder / "EMAIL_author.txt").write_text(message.SenderName or "未知发件人") # 获取部门信息 department_info = "无部门信息" try: sender_entry = message.Sender.AddressEntry # 仅处理Exchange内部用户(类型为"EX") if sender_entry.Type == "EX": exchange_user = sender_entry.GetExchangeUser() if exchange_user: department_info = exchange_user.Department or "未设置部门" except Exception as e: department_info = f"获取失败: {str(e)}" # 保存部门信息(建议重命名文件更直观) Path(target_folder / "EMAIL_department.txt").write_text(department_info) num += 1
核心要点
- 直接获取发件人地址条目:通过
message.Sender.AddressEntry直接获取发件人地址对象,避免手动解析邮件地址的错误 - 判断用户类型:只有类型为
"EX"的地址条目是Exchange内部用户,才具备部门属性 - 访问正确属性:Exchange用户对象的
Department属性直接对应部门信息 - 异常处理:添加try-except块,避免因外部发件人或信息缺失导致脚本崩溃
内容的提问来源于stack exchange,提问作者DyingInCS
相关产品推荐
相关产品推荐

