我正在使用 exchangelib 维护一个应用程序。我需要能够将电子邮件移动到不同的文件夹,这完全可以使用 exchangelib。但是,我应该让我的客户有可能手动执行相同的操作。我想要做的是稍后查看将哪些电子邮件移动到哪个文件夹。所以我需要一个电子邮件跟踪 ID。所以可能的问题是:
message_id字段是否用作此唯一标识符?- 似乎无法使用
message_id批量获取电子邮件。这方面的最佳做法是什么?我可以通过调用account.fetch使用item_id和changekey获取电子邮件,但是,当用户在不同的文件夹中移动电子邮件时,它们会发生变化,而message_id没有。
请您参考如下方法:
回复。 1,看来你已经发现了message_id移动项目时保持不变。我无法从 EWS 中找到关于此事实的任何硬性文档,因此请务必进行广泛的测试。
回复。 2、确实只能用account.fetch与 item_id值。但是,有一些事情需要注意:
- 当您调用
item.move(),item.item_id和item.changekey属性更新到新位置,您可以存储该位置以供将来批量操作使用。参见 https://github.com/ecederstrand/exchangelib/blob/3a1def29951d26c8a1b7021c7582c3d118181140/exchangelib/items.py#L365 - 您仍然可以通过
message_id批量获取首先翻译message_id到item_id.这是一个FindItem打电话然后一个GetItem打电话:
item_ids = account.inbox.filter(message_id__in=<your_message_ids>) \
.values_list('item_id', 'changekey')
bulk_items = account.fetch(item_ids)
你可能想要分块 <your_message_ids>项目所以 __in过滤器不会变得非常大。
