Skip to main content
 首页 » 编程设计

python之通过 message_id 使用 exchangelib 获取电子邮件

2025年01月19日35飞鱼

我正在使用 exchangelib 维护一个应用程序。我需要能够将电子邮件移动到不同的文件夹,这完全可以使用 exchangelib。但是,我应该让我的客户有可能手动执行相同的操作。我想要做的是稍后查看将哪些电子邮件移动到哪个文件夹。所以我需要一个电子邮件跟踪 ID。所以可能的问题是:

  1. message_id 字段是否用作此唯一标识符?
  2. 似乎无法使用 message_id 批量获取电子邮件。这方面的最佳做法是什么?我可以通过调用 account.fetch 使用 item_id 和 changekey 获取电子邮件,但是,当用户在不同的文件夹中移动电子邮件时,它们会发生变化,而message_id 没有。

请您参考如下方法:

回复。 1,看来你已经发现了message_id移动项目时保持不变。我无法从 EWS 中找到关于此事实的任何硬性文档,因此请务必进行广泛的测试。

回复。 2、确实只能用account.fetch与 item_id值。但是,有一些事情需要注意:

  1. 当您调用 item.move() , item.item_id和 item.changekey属性更新到新位置,您可以存储该位置以供将来批量操作使用。参见 https://github.com/ecederstrand/exchangelib/blob/3a1def29951d26c8a1b7021c7582c3d118181140/exchangelib/items.py#L365
  2. 您仍然可以通过 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过滤器不会变得非常大。