使用 Python Win32com 在 Outlook 中提取收件人电子邮件地址
Extract Recipients Email Address in Outlook using Python Win32com
我正在尝试使用 Win32com 客户端在 Python 中提取收件人电子邮件地址。
到目前为止,这是我的代码:
import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.Folders["[my email address"].Folders["Inbox"]
def get_email_address():
for message in inbox.Items:
print("========")
print("Subj: " + message.Subject)
print('To:', message.Recipients) #this part does not work
print("Email Type: ", message.SenderEmailType)
if message.Class == 43:
try:
if message.SenderEmailType == "SMTP":
print("Name: ", message.SenderName)
print("Email Address: ", message.SenderEmailAddress)
print('To:', message.Recipients) #this part does not work
print("Date: ", message.ReceivedTime)
elif message.SenderEmailType == "EX":
print("Name: ", message.SenderName)
print("Email Address: ", message.Sender.GetExchangeUser(
).PrimarySmtpAddress)
print('To:', message.Recipients) #this part does not work
print("Date: ", message.ReceivedTime)
except Exception as e:
print(e)
continue
if __name__ == '__main__':
get_email_address()
如您所见,我可以获取发件人电子邮件地址...但是如何获取收件人电子邮件地址?
这与您对发件人所做的类似 - 遍历 MailItem.Recipients
集合中的收件人,并为每个 Recipient
使用 Recipient.AddressEntry
属性 来执行操作您已经在使用 MailItem.Sender
属性.
另请注意,这不是最有效的方法 - 如果配置文件没有父 Exchange 服务器,则打开地址条目可能会很昂贵或完全不可能,例如如果您正在处理独立的 MSG 文件或从 Exchange 邮箱复制到 PST 的邮件。在大多数情况下,SMTP 地址可直接在邮件中找到,例如来自 PidTagSenderSmtpAddress
(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x5D01001F
),可以使用 MailItem.PropertyAccessor.GetProperty
访问。同样,收件人 SMTP 地址可能在 PR_SMTP_ADDRESS
属性(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x39FE001F
,使用 Recipient.PropertyAccessor.GetProperty
)中可用 - 您可以在 OutlookSpy(我我是它的作者 - 单击 IMessage 按钮 属性).
我正在尝试使用 Win32com 客户端在 Python 中提取收件人电子邮件地址。
到目前为止,这是我的代码:
import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.Folders["[my email address"].Folders["Inbox"]
def get_email_address():
for message in inbox.Items:
print("========")
print("Subj: " + message.Subject)
print('To:', message.Recipients) #this part does not work
print("Email Type: ", message.SenderEmailType)
if message.Class == 43:
try:
if message.SenderEmailType == "SMTP":
print("Name: ", message.SenderName)
print("Email Address: ", message.SenderEmailAddress)
print('To:', message.Recipients) #this part does not work
print("Date: ", message.ReceivedTime)
elif message.SenderEmailType == "EX":
print("Name: ", message.SenderName)
print("Email Address: ", message.Sender.GetExchangeUser(
).PrimarySmtpAddress)
print('To:', message.Recipients) #this part does not work
print("Date: ", message.ReceivedTime)
except Exception as e:
print(e)
continue
if __name__ == '__main__':
get_email_address()
如您所见,我可以获取发件人电子邮件地址...但是如何获取收件人电子邮件地址?
这与您对发件人所做的类似 - 遍历 MailItem.Recipients
集合中的收件人,并为每个 Recipient
使用 Recipient.AddressEntry
属性 来执行操作您已经在使用 MailItem.Sender
属性.
另请注意,这不是最有效的方法 - 如果配置文件没有父 Exchange 服务器,则打开地址条目可能会很昂贵或完全不可能,例如如果您正在处理独立的 MSG 文件或从 Exchange 邮箱复制到 PST 的邮件。在大多数情况下,SMTP 地址可直接在邮件中找到,例如来自 PidTagSenderSmtpAddress
(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x5D01001F
),可以使用 MailItem.PropertyAccessor.GetProperty
访问。同样,收件人 SMTP 地址可能在 PR_SMTP_ADDRESS
属性(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x39FE001F
,使用 Recipient.PropertyAccessor.GetProperty
)中可用 - 您可以在 OutlookSpy(我我是它的作者 - 单击 IMessage 按钮 属性).