You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的win32com获取Outlook垃圾邮件中发件人部门

解决方案

要获取Outlook垃圾邮件中发件人的部门信息,你需要修正几个关键问题,以下是可行的解决方法:

问题分析

  1. 手动构造收件人的方式不可靠,垃圾邮件的发件人地址格式可能不符合预期,导致无法正确解析
  2. 错误调用了GetExchangeUserManager()方法,这是获取上级主管的接口,并非部门属性
  3. 未处理发件人非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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:50:43