使用Python的Win32Com操作Outlook时如何获取收件人邮箱地址
问题原因
msg.Recipients属于Outlook COM接口的收件人集合对象,不是可直接打印的字符串类型,因此直接输出会显示<COMObject <unknown>>;而msg.To仅返回拼接后的收件人显示名称,不包含邮箱地址信息。
解决方案
遍历Recipients集合中的单个收件人对象,读取地址属性即可:
基础版(适用大多数场景)
# 遍历所有收件人 for rec in msg.Recipients: # 输出收件人邮箱地址 print(rec.Address) # 可选:判断收件人类型,1=收件人、2=抄送、3=密送 print(f"类型:{rec.Type},地址:{rec.Address}")
兼容Exchange环境版
如果是企业内部Exchange邮箱,直接读取Address可能返回EX:开头的内部地址,可通过以下方法获取标准SMTP邮箱地址:
def get_smtp_addr(recipient): raw_addr = recipient.Address # 已经是标准SMTP地址直接返回 if raw_addr.startswith("SMTP:"): return raw_addr[5:] # 处理Exchange内部地址 if raw_addr.startswith("EX:"): exchange_user = recipient.AddressEntry.GetExchangeUser() if exchange_user: return exchange_user.PrimarySmtpAddress return raw_addr # 调用示例 for rec in msg.Recipients: print(get_smtp_addr(rec))
内容的提问来源于stack exchange,提问作者Peter Mattmann
相关产品推荐
相关产品推荐

