使用win32从Python中的Outlook Exchange中提取发件人的电子邮件地址

pyt*_*hon 5 python email outlook pywin32 win32com

我试图使用python中的win32包从outlook 2013中提取发件人的电子邮件地址.我的收件箱,交换和smtp有两种电子邮件地址类型.如果我尝试打印发件人的Exchange类型的电子邮件地址,我得到这个:

/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP(FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=6F467C825619482293F429C0BDE6F1DB-
Run Code Online (Sandbox Code Playgroud)

我已经通过这个链接,但找不到一个函数,通过它我可以提取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  
Run Code Online (Sandbox Code Playgroud)

目前所有的电子邮件地址都是这样的:

/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP(FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=6F467C825619482293F429C0BDE6F1DB-
Run Code Online (Sandbox Code Playgroud)

我在VB.net 链接中找到了一个解决方案,但不知道如何在Python中重写相同的东西.

Dmi*_*nko 8

首先,如果文件夹中有MailItem以外的项目,例如ReportItem,MeetingItem等,则代码将失败.您需要检查类属性.

其次,您需要检查发件人电子邮件地址类型,并仅将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
Run Code Online (Sandbox Code Playgroud)


pyt*_*hon 6

我只是在修改上面在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
Run Code Online (Sandbox Code Playgroud)

这只会在您的收件箱文件夹中打印出所有发件人的电子邮件地址。