получение писем с использованием exchangelib по message_id - PullRequest
0 голосов
/ 30 апреля 2018

Я поддерживаю приложение, используя exchangelib. Мне нужно иметь возможность перемещать электронные письма в разные папки, что вполне возможно при использовании exchangelib. Однако я должен дать возможность своим клиентам сделать то же самое вручную. То, что я хочу сделать, это посмотреть, какое письмо будет перемещено в какую папку позже. Поэтому мне нужен идентификатор для отслеживания электронной почты. Так что вопросы могут быть:

  1. Является ли поле message_id уникальным идентификатором?
  2. Похоже, невозможно получить электронные письма оптом, используя message_id. Какова лучшая практика для этого? Я могу получать электронные письма, используя item_id и changekey, вызывая account.fetch, однако они меняются, когда пользователь перемещает электронную почту по разным папкам, а message_id - нет.

1 Ответ

0 голосов
/ 01 мая 2018

Re. 1, кажется, вы уже обнаружили, что message_id остается нетронутым при перемещении элемента. Я не могу найти какой-либо твердой документации от EWS относительно этого факта, поэтому обязательно проведите обширное тестирование.

Re. 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 не становился слишком большим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...