message_id 使用 exchangelib 获取电子邮件
fetching emails using exchangelib by message_id
我正在维护一个使用 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
过滤器就不会变得非常大。
我正在维护一个使用 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
过滤器就不会变得非常大。