尝试调用 SendMailAsync 时,在 20 封电子邮件后失败。但是,非异步版本的调用可以工作。错误消息是:“服务器响应是:4.3.2 并发服务器连接的最大数量已超出每个源的限制,正在关闭传输通道”。请问有人可以建议吗?
public SmtpClient SetupEMail()
{
return new SmtpClient("mail")
{
UseDefaultCredentials = false,
Credentials = new NetworkCredential("mailuser", "mailpassword")
};
}
public async Task SendEmails()
{
var Mail = new MailMessage("[email protected]", "[email protected]", "Test Subject", "Test body");
using (var client = _email.SetupEMail())
{
for (int i = 0; i < 24; i++)
{
Mail.To.Clear();
Mail.To.Add((i % 2 == 0 ? "[email protected]" : "[email protected]"));
Mail.Subject = $"{i}";
Mail.Body = $"{i}";
await client.SendMailAsync(Mail); // async method not work
client.Send(Mail); // works fine
}
};
}
如果您使用 System.Net.Mail 中的 SmtpClient 那么这是已知问题,SendMailAsync 无法正确回收连接 => 您达到允许的最大打开连接数(不同邮件服务器之间可能有所不同)。
在这里查看类似的问题
发送大量邮件时SmtpClient.SendMailAsync方法挂起
该库已过时,MailKit 是它的正确替代品。
查看详情
https://learn.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?view=net-8.0