Python 通过邮件id使用exchangelib获取电子邮件

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获取电子邮件。但是

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

  • 消息\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)