使用 win32 从 Python 中的 Outlook Exchange 中提取发件人的电子邮件地址
Extract sender's email address from Outlook Exchange in Python using win32
我正在尝试使用 python 中的 win32 包从 outlook 2013 中提取发件人的电子邮件地址。我的收件箱中有两种电子邮件地址类型,exchange 和 smtp。如果我尝试打印 Exchange 类型的发件人电子邮件地址,我会得到:
/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP(FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=6F467C825619482293F429C0BDE6F1DB-
我已经完成了这个 link 但是找不到可以提取 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 中找到了解决方案,但不知道如何在 Python 中重写相同的内容。
首先,如果文件夹中有 MailItem
以外的项目,例如 ReportItem
、MeetingItem
等,您的代码将失败。您需要检查 Class
属性.
其次,您需要检查发件人电子邮件地址类型,并仅将 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
我只是修改上面Python中给出的程序。
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:
if msg.Class==43:
if msg.SenderEmailType=='EX':
print msg.Sender.GetExchangeUser().PrimarySmtpAddress
else:
print msg.SenderEmailAddress
这将仅在您的收件箱文件夹中打印出所有发件人的电子邮件地址。
我今天在使用 win32com 时遇到了同样的问题。我找到了解决方案 here.
使用您的示例将是:
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:
if msg.Class==43:
if msg.SenderEmailType=='EX':
if msg.Sender.GetExchangeUser() != None:
print msg.Sender.GetExchangeUser().PrimarySmtpAddress
else:
print msg.Sender.GetExchangeDistributionList().PrimarySmtpAddress
else:
print msg.SenderEmailAddress
这应该可以解决群组邮件问题。
我正在尝试使用 python 中的 win32 包从 outlook 2013 中提取发件人的电子邮件地址。我的收件箱中有两种电子邮件地址类型,exchange 和 smtp。如果我尝试打印 Exchange 类型的发件人电子邮件地址,我会得到:
/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP(FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=6F467C825619482293F429C0BDE6F1DB-
我已经完成了这个 link 但是找不到可以提取 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 中找到了解决方案,但不知道如何在 Python 中重写相同的内容。
首先,如果文件夹中有 MailItem
以外的项目,例如 ReportItem
、MeetingItem
等,您的代码将失败。您需要检查 Class
属性.
其次,您需要检查发件人电子邮件地址类型,并仅将 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
我只是修改上面Python中给出的程序。
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:
if msg.Class==43:
if msg.SenderEmailType=='EX':
print msg.Sender.GetExchangeUser().PrimarySmtpAddress
else:
print msg.SenderEmailAddress
这将仅在您的收件箱文件夹中打印出所有发件人的电子邮件地址。
我今天在使用 win32com 时遇到了同样的问题。我找到了解决方案 here.
使用您的示例将是:
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:
if msg.Class==43:
if msg.SenderEmailType=='EX':
if msg.Sender.GetExchangeUser() != None:
print msg.Sender.GetExchangeUser().PrimarySmtpAddress
else:
print msg.Sender.GetExchangeDistributionList().PrimarySmtpAddress
else:
print msg.SenderEmailAddress
这应该可以解决群组邮件问题。