Что такое ErrorMessagePerFolderCountReceiveQuotaExceeded?

Я синхронизирую почтовые папки Office 365 через API-интерфейс REST Office 365, выполняя GET на me/MailFolders/{folder_id}/messages, Для двух разных аккаунтов я недавно получил 500 ответов на эти GETs с кодом ошибки ErrorMessagePerFolderCountReceiveQuotaExceeded и сообщением об ошибке "Количество полученных сообщений превысило квоту для папки". (Опечатка их, а не моя.)

Я не могу найти документацию по этой ошибке. Что это значит? Что я должен сделать, чтобы исправить эту ситуацию?

2 ответа

Решение

Когда вы выполняете синхронизацию с папкой Exchange через API Outlook REST, вы передаете ей маркер синхронизации. В ответ API возвращает новый токен синхронизации и набор изменений. Ожидается, что клиент отправит новый токен обратно со своим следующим запросом синхронизации.

В большинстве систем, которые поддерживают синхронизацию, использование устаревшего токена синхронизации (т. Е. Того, который был отправлен на сервер один раз) в последующем запросе, как правило, будет успешным без проблем. И кажется, что Exchange работает так... в первые 999 999 раз, когда вы это делаете. В 1 000 000-й раз (и каждый раз после этого) вы получаете ErrorMessagePerFolderCountReceiveQuotaExceeded. Это (я думаю), потому что Exchange отслеживает каждый выданный токен и обновляет токен в своем хранилище каждый раз, когда он используется для синхронизации. Если клиент использует устаревший токен, Exchange рассматривает его как нового клиента и добавляет этот устаревший токен в качестве новой записи в свой список активных токенов. Этот список активных токенов может содержать не более 1 000 000 записей. ErrorMessagePerFolderCountReceiveQuotaExceeded является загадочной ошибкой, указывающей на переполнение списка активных маркеров Exchange.

Я не мог найти документацию для этого либо.

Судя по сообщению об ошибке, оно может быть связано с лимитом "Максимальное количество сообщений в папке почтового ящика" в Exchange Online. Знаете ли вы, если папка содержит 1M+ сообщения?

https://technet.microsoft.com/en-us/library/exchange-online-limits.aspx


Думаю, моя другая идея заключается в том, что вы получаете слишком много сообщений за слишком короткий промежуток времени. Предложение будет использовать конечную точку GET https://outlook.office365.com/api/v2.0/me/MailFolders('{folder_id}')/messages с $deltaToken а также $skipToken пропустить ранее синхронизированные сообщения.

https://msdn.microsoft.com/en-us/office/office365/api/mail-rest-operations

Другие вопросы по тегам