SendMailAsync 在第 20 封电子邮件上失败,但非异步版本可以工作

问题描述 投票:0回答:1

尝试调用 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

            }

        };

    }
c# sendmail asp.net-core-6.0
1个回答
0
投票

如果您使用 System.Net.Mail 中的 SmtpClient 那么这是已知问题,SendMailAsync 无法正确回收连接 => 您达到允许的最大打开连接数(不同邮件服务器之间可能有所不同)。

在这里查看类似的问题

发送大量邮件时SmtpClient.SendMailAsync方法挂起

该库已过时,MailKit 是它的正确替代品。

查看详情
https://learn.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?view=net-8.0

© www.soinside.com 2019 - 2024. All rights reserved.