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

时间:2018-04-30 15:00:17

标签: python exchange-server exchangelib

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

  1. message_id字段是否作为此唯一标识符?
  2. 似乎无法使用message_id批量提取电子邮件。这是什么最好的做法?我可以通过调用item_id来使用changekeyaccount.fetch来接收电子邮件,但是,当用户在不同文件夹中移动电子邮件时,它们会发生变化,而message_id则不会。

1 个答案:

答案 0 :(得分:1)

重新。 1,您似乎已经发现移动项目时message_id保持不变。我无法从EWS找到任何有关此事实的硬文档,因此请务必进行大量测试。

重新。 2,您只能将account.fetchitem_id值一起使用。但是,有一些事情需要注意:

  1. 当您致电item.move()时,item.item_iditem.changekey属性会更新到新位置,您可以存储该位置以供将来批量操作使用。请参阅https://github.com/ecederstrand/exchangelib/blob/3a1def29951d26c8a1b7021c7582c3d118181140/exchangelib/items.py#L365
  2. 您仍可以message_id批量提取,首先将message_id翻译为item_id。这会进行FindItem通话,然后进行GetItem通话:
  3. 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过滤器不会变得非常大。