我需要使用 Windows 服务中的 Microsoft Graph 发送多封电子邮件。
我正在使用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 中的外观:
我的问题是:我可以使用以及应该如何使用 GraphParallel.For
来避免这种错误。我已经WithMaxRetry(5)
为每个请求进行了设置。
我知道使用限制,但我认为WithMaxRetry(5)
会有所帮助。