获取 AttributeError: 发送者同时迭代获取特定值

问题描述

在交换查询迭代时抛出“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' 上添加过滤器。