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

问题描述 投票:0回答:4

我正在尝试使用 python 中的 win32 包从 Outlook 2013 中提取发件人的电子邮件地址。我的收件箱中有两种电子邮件地址类型,exchange 和 smtp。如果我尝试打印 Exchange 类型的发件人电子邮件地址,我会得到以下信息:

/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP(FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=6F467C825619482293F429C0BDE6F1DB-

我已经浏览过这个链接,但找不到可以提取 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 中重写相同的东西。

python email outlook pywin32 win32com
4个回答
20
投票

首先,如果文件夹中有

MailItem
以外的项目,例如
ReportItem
MeetingItem
等,您的代码将会失败。您需要检查
Class
属性(由所有 Outlook 对象公开)是 43 (
olMail
)。

其次,您需要检查发件人电子邮件地址类型,并仅对“SMTP”地址类型使用

SenderEmailAddress
属性。在 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

12
投票

我只是用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

这将仅打印收件箱文件夹中的所有发件人电子邮件地址。


2
投票

我今天在使用 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

这应该可以解决群组邮件问题。


0
投票

我只能获取第一个发件人的邮件地址。如何获取所有发件人的列表

© www.soinside.com 2019 - 2024. All rights reserved.