我正在尝试使用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'
我想我已经确保在代码中避免这种情况。
答案 0 :(得分:1)
该错误非常明确-因为ReportItem
对象没有公开SenderEmailAddress
属性,所以您收到此错误。您假设收件箱中只能存在MailItem
个对象。那是不对的。
检查Class
属性(它被所有OOM对象公开)是否为43(OlObjectClass.olMail
)。
看看OutlookSpy中的OOM对象-选择一条消息,然后单击“项目”按钮。