问题描述
在交换查询迭代时抛出“AttributeError: sender”。与其他值(message_id 等)相同。在这一点上,我唯一的选择是在它周围放置一个 try/catch,并且需要在循环下重构大量内容。但是,我认为查询在正常情况下不应因任何数据问题而崩溃。请让我知道可能出了什么问题。似乎是一个“坏”的电子邮件对象导致了它?
kwargs = {"is_read": False}
kwargs["datetime_received__gt"] = some_date_time
filtered_items = my_exchange._service_account.inBox.filter(**kwargs)
filtered_items.page_size = 20
print(filtered_items.count())
3 <-- 3 objects
for sender_obj,msg_id,msg_subj,msg_text,msg_size in filtered_items.values_list("sender","message_id","subject","text_body","size").iterator():
print(sender_obj)
count = count + 1
print(count)
MailBox(name='Some User1',email_address='someuser1@myemail.acme',routing_type='SMTP',mailBox_type='MailBox')
1
MailBox(name='Some User2',email_address='someuser2@myemail.acme',mailBox_type='OneOff')
2
Traceback (most recent call last):
File "<console>",line 1,in <module>
File "/usr/local/lib/python3.6/site-packages/exchangelib/queryset.py",line 273,in __iter__
yield from self._format_items(items=self._query(),return_format=self.return_format)
File "/usr/local/lib/python3.6/site-packages/exchangelib/queryset.py",line 352,in _item_yielder
yield item_func(i)
File "/usr/local/lib/python3.6/site-packages/exchangelib/queryset.py",line 380,in <lambda>
item_func=lambda i: tuple(f.get_value(i) for f in self.only_fields),File "/usr/local/lib/python3.6/site-packages/exchangelib/queryset.py",in <genexpr>
item_func=lambda i: tuple(f.get_value(i) for f in self.only_fields),File "/usr/local/lib/python3.6/site-packages/exchangelib/fields.py",line 189,in get_value
return getattr(item,self.field.name)
AttributeError: sender
解决方法
看起来您正在尝试获取不是消息的内容的 sender
字段。您的收件箱可能包含会议请求或其他一些非邮件对象。
我不确定这是一个错误。您期望获取没有 sender
字段的内容的 sender
属性的结果是什么?
如果您只想要列表中的 Message 对象,您可以尝试在 item_class='IPF.Note'
上添加过滤器。