python - 通过 message_id 使用 exchangelib 获取电子邮件
问题描述
我正在使用 exchangelib 维护一个应用程序。我需要能够将电子邮件移动到不同的文件夹,这完全可以使用 exchangelib。但是,我应该让我的客户手动执行相同的操作。我想要做的是查看稍后将哪些电子邮件移动到哪个文件夹。所以我需要一个电子邮件的跟踪 ID。所以可能的问题是:
- 该字段是否
message_id
用作此唯一标识符? - 似乎无法使用
message_id
. 对此的最佳做法是什么?我可以使用item_id
和获取电子邮件changekey
,但是通过调用account.fetch
,它们会随着用户在不同文件夹中移动电子邮件而改变,而message_id
不会。
解决方案
回覆。1,您似乎已经发现,message_id
当一个项目被移动时,它保持不变。我无法从 EWS 中找到任何关于此事实的硬文件,因此请务必进行广泛的测试。
回覆。2、确实只能用account.fetch
withitem_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
过滤器不会变得非常大。
推荐阅读
- python - Plotly Table Multiindex Dataframe
- css - Mat-select cell dynamically expand to width of the select value
- pagination - Why Are Deleted Posts Showing Up in Paginated Posts in Jekyll Blog?
- c# - Await FinishedLoading() in Xamarin.Forms iOS
- sql - SnowFlake MERGE 更新/插入所有列
- java - Comparator does not work after using SearchView
- html - 如果没有表格标签,如何在 R 中使用 html_table 抓取表格?
- python - How do I pass data from python to stdin and capture the stdout results?
- javascript - How to attach onClick Listener dynamically in a span tag and store it in MongoDB
- python - not able to authenticate user