使用 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 按钮 属性).