Мне нужно отправить несколько электронных писем с помощью Microsoft Graph из службы Windows.
Я использую Microsoft.Graph
пакет NuGet.
Я создаю GraphServiceClient
и отправляю почту так:
IGraphServiceClient graphClient = new GraphServiceClient("https://graph.microsoft.com/v1.0", authenticationProvider);
var email = new Message
{
Body = new ItemBody
{
Content = "Works fine!",
ContentType = BodyType.Html,
},
Subject = "Test",
ToRecipients = recipientList
};
await graphClient.Users["test@example.onmicrosoft.com"].SendMail(email, true).Request().WithMaxRetry(5).PostAsync();
Когда я отправляю электронные письма по одному:
for (var j = 0; j < 20; j++)
{
await graphClient.Users["test@example.onmicrosoft.com"].SendMail(email, true).Request().WithMaxRetry(5).PostAsync();
progressBar1.PerformStep();
}
все работает нормально, но когда я использую Parallel.For
:
var res = Parallel.For(0, 20, async (i, state) =>
{
var email = new Message
{
Body = new ItemBody
{
Content = "Works fine!",
ContentType = BodyType.Html,
},
Subject = "Test",
ToRecipients = recipientList
};
await graphClient.Users["test@example.onmicrosoft.com"].SendMail(email, true).Request().WithMaxRetry(5).PostAsync();
});
Я получаю ошибки, потому что получаю слишком много запросов (429), а затем - неподдерживаемый тип носителя (415).
Это код ошибки:
Код: RequestBodyRead Сообщение: отсутствует или пустой заголовок типа контента
был найден при попытке прочитать сообщение. Заголовок типа контента
требуется.
Вот как это выглядит в Fiddler:
У меня вопрос: могу ли я использовать и как использовать Graph с Parallel.For
, чтобы избежать ошибок такого рода. Я уже устанавливаю WithMaxRetry(5)
для каждого запроса.
Я знаю об ограничениях использования, но я думал, что WithMaxRetry(5)
поможет.