我正在尝试使用 python 中的 win32 包从 Outlook 2013 中提取发件人的电子邮件地址。我的收件箱中有两种电子邮件地址类型,exchange 和 smtp。如果我尝试打印 Exchange 类型的发件人电子邮件地址,我会得到以下信息:
/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP(FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=6F467C825619482293F429C0BDE6F1DB-
我已经经历过这个link https://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.mailitem_properties.aspx但找不到可以提取 smtp 地址的函数。
下面是我的代码:
from win32com.client import Dispatch
outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder("6")
all_inbox = inbox.Items
folders = inbox.Folders
for msg in all_inbox:
print msg.SenderEmailAddress
目前所有电子邮件地址都是这样的:
/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP(FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=6F467C825619482293F429C0BDE6F1DB-
我在VB.net中找到了解决方案link https://stackoverflow.com/questions/22193757/how-do-i-get-the-real-email-address-with-exchange-web-services但不知道如何用Python重写同样的东西。
首先,如果您有除以下以外的其他项目,您的代码将会失败MailItem
文件夹中,例如ReportItem
, MeetingItem
等。您需要检查Class
属性(由所有 Outlook 对象公开)是 43 (olMail
).
其次,您需要检查发件人电子邮件地址类型并使用SenderEmailAddress
属性仅适用于“SMTP”地址类型。在VB中:
for each msg in all_inbox
if msg.Class = 43 Then
if msg.SenderEmailType = "EX" Then
print msg.Sender.GetExchangeUser().PrimarySmtpAddress
Else
print msg.SenderEmailAddress
End If
End If
next
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)