PyWin32:如何获取已发送特定主题电子邮件的发件人地址?

时间:2018-08-07 13:44:32

标签: email outlook pywin32

我正在尝试使用Python 3.6在Outlook中抓取我的电子邮件“收件箱”文件夹,因为我想获取针对特定主题而写信给我的发件人地址列表(让它为“ Word”)。

这是我的尝试:

import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
message = messages.GetFirst()
emails={}
while message:
    subj_line = str(message.Subject)
    if "Word" in subj_line and len(str(message.SenderEmailAddress))>0:
        sender=str(message.SenderEmailAddress)
        emails[sender]=subj_line
        message = messages.GetNext()

由于某种原因,此尝试导致无限循环,而我需要检查的电子邮件数量略超过2,000。 为什么会这样?

如果我摆脱了“单词”标准,则其余部分保持不变:

import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
message = messages.GetFirst()
emails={}
while message:
    subj_line = str(message.Subject)
    if len(str(message.SenderEmailAddress))>0:
        sender=str(message.SenderEmailAddress)
        emails[sender]=subj_line
        message = messages.GetNext()

为什么会出现以下错误?

AttributeError: '<win32com.gen_py.Microsoft Outlook 16.0 Object Library._ReportItem instance at 0x1635229101528>' object has no attribute 'SenderEmailAddress'

我想我已经确保在代码中避免这种情况。

1 个答案:

答案 0 :(得分:1)

该错误非常明确-因为ReportItem对象没有公开SenderEmailAddress属性,所以您收到此错误。您假设收件箱中只能存在MailItem个对象。那是不对的。

检查Class属性(它被所有OOM对象公开)是否为43(OlObjectClass.olMail)。

看看OutlookSpy中的OOM对象-选择一条消息,然后单击“项目”按钮。