Python 通过邮件id使用exchangelib获取电子邮件
我正在使用exchangelib维护一个应用程序。我需要能够移动电子邮件到不同的文件夹,这是完全可能使用exchangelib。但是,我应该让我的客户可以手动执行同样的操作。我想能够做的是看看什么电子邮件被移动到哪个文件夹以后。所以我需要一个电子邮件跟踪id。因此,问题可能是:Python 通过邮件id使用exchangelib获取电子邮件,python,exchange-server,exchangelib,Python,Exchange Server,Exchangelib,我正在使用exchangelib维护一个应用程序。我需要能够移动电子邮件到不同的文件夹,这是完全可能使用exchangelib。但是,我应该让我的客户可以手动执行同样的操作。我想能够做的是看看什么电子邮件被移动到哪个文件夹以后。所以我需要一个电子邮件跟踪id。因此,问题可能是: 消息\u id字段是否用作此唯一标识符 似乎无法使用message\u id批量获取电子邮件。这方面的最佳做法是什么?我可以使用item\u id和changekey,通过调用account.fetch获取电子邮件。但是
消息\u id
字段是否用作此唯一标识符李>
message\u id
批量获取电子邮件。这方面的最佳做法是什么?我可以使用item\u id
和changekey
,通过调用account.fetch
获取电子邮件。但是,它们会随着用户在不同文件夹中移动电子邮件而改变,而消息\u id
则不会李>
Re。1,您似乎已经发现移动项目时,
message\u id
保持不变。我在EWS上找不到任何关于这个事实的硬文档,所以一定要做大量的测试
Re。2.确实,您只能使用account.fetch
和item\u id
值。但是,有一些事情需要注意:
item.move()
,item.item\u id
和item.changekey
属性将更新到新位置,您可以将其存储以供将来的批量操作。看消息id
转换为项目id
来批量获取消息id
。这将执行FindItem
调用,然后执行GetItem
调用:item\u id=account.inbox.filter(message\u id\u in=)\
.values\u列表('item\u id','changekey')
bulk\u items=account.fetch(item\u id)
您可能希望将
项分块,以便过滤器中的\u不会变得非常大。非常感谢您的回答。这似乎解决了问题。只是一个相关的问题。是否有可能强制filter()
函数在文件夹内递归搜索?默认情况下,它只有一级深度。是的。搜索API也适用于文件夹集合,例如account.inbox.children.filter()
或account.inbox.root.glob('foo*').filter()
。请参阅本节的底部。@ErikCederstrand hello Erik。。如何获取所有邮件属性名称列表?像重要性
,有附件
等。。我们是否可以从exchangelib获得邮件属性名称的完整列表?最简单的方法可能是在Message.FIELDS:print(f.name)
中为f设置。另见
item_ids = account.inbox.filter(message_id__in=<your_message_ids>) \
.values_list('item_id', 'changekey')
bulk_items = account.fetch(item_ids)