При отправке электронных писем с помощью Microsoft Graph API как правильно отправить более 150 МБ в течение 5 минут?

Фон:

Мы создали два однотенантных приложения Azure с одинаковым набором разрешений (Mail.Send и Mail.ReadWrite) в одном клиенте. Согласно документации Graph API, мы должны иметь возможность отправлять электронные письма размером до 150 МБ на каждое письмо через комбинацию 1 приложения и 1 почтового ящика.

Ссылка — https://learn.microsoft.com/en-us/graph/throttling-limits#outlook-service-limits

Проблема:

Поскольку в документации упоминается эта комбинация, в идеале, если у нас есть два разных приложения Azure, мы сможем отправить два отдельных электронных письма размером 150 МБ каждое (всего 300 МБ) в течение 5 минут из одного и того же почтового ящика.

Но, к сожалению, это не работает. Мы получаем ошибку регулирования от Graph API при попытке составить второе электронное письмо.

{
    "error": {
        "code": "ApplicationThrottled",
        "message": "Application is over its IncomingBytes limit."
    }
}

Вопрос:

Если в документации упоминается такая комбинация, то почему API не позволяет загружать более 150 МБ (2 отдельных электронных письма) в один и тот же почтовый ящик в течение 5 минут с использованием двух разных приложений Azure?

Пример:

  • Создайте авторизацию token1 из App1.
  • Создайте черновик письма в mailbox1 и загрузите файл размером 140 МБ, используя сеанс загрузки.
  • Создайте авторизацию token2 из App2.
  • Создайте еще один черновик письма в том же mailbox1 и загрузите файл размером 140 МБ, используя сеанс загрузки. На этом этапе происходит сбой с вышеуказанной ошибкой.

Подайте заявку в службу поддержки MicroSoft. Возможно, связанные детали не совсем точны, только MS может знать наверняка.

phuzi 25.06.2024 10:53

Я уже создал одну заявку, этот вопрос позволит мне узнать, сталкивался ли кто-нибудь еще с такой же проблемой, и я смогу публиковать здесь обновления о моей заявке MS.

Piyush Chugh 25.06.2024 10:57

Вам также необходимо учитывать раздувание MIME, хотя размер вложения может быть меньше 150, когда вы попытаетесь отправить его, оно раздуется на 137% en.wikipedia.org/wiki/Base64#MIME поэтому 140 МБ, как правило, все равно будет слишком большим .

Glen Scales 26.06.2024 03:19

@GlenScales Я воспроизвел проблему через Postman, загрузив PDF-файл размером 120 МБ в 2 отдельных письма в один и тот же почтовый ящик через 2 разных приложения. Это успешно в приложении1, но терпит неудачу в приложении2.

Piyush Chugh 26.06.2024 10:25

В документации это неясно (она неоднозначна), но я понимаю, что когда вы используете субъекты службы (например, поток учетных данных клиента), это использует олицетворение. Таким образом, хотя вы используете разные принципы приложения/службы, бюджет регулирования по-прежнему взимается с олицетворенного пользователя. Вы, вероятно, обнаружите, что использование токена делегата и токена приложения для почтового ящика будет работать (в пределах 5-минутного окна), поскольку они, как правило, представляют собой отдельные бюджеты регулирования. Я считаю, что это сделано таким образом, чтобы ограничить влияние службы на каждый почтовый ящик.

Glen Scales 27.06.2024 02:07

@GlenScales То, что вы говорите, имеет смысл, однако в моем случае мне приходится придерживаться разрешений приложений. Я все еще ожидал, что смогу добиться этого с помощью двух разных приложений Azure.

Piyush Chugh 27.06.2024 09:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После создания заявки в службу поддержки Microsoft и последующего общения с ними в течение последнего 1 месяца пришел к выводу, что это запрещено по замыслу.

Вот обновленная документация, чтобы избежать дальнейшей путаницы. Теперь поведение API и документация совпадают друг с другом:

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