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

标签 c# async-await smtpclient

我正在尝试使用 SmtpClient.SendMailAsync 方法发送大量电子邮件。 这是我从简单控制台应用程序调用的测试方法。

    static void Main(string[] args)
    {

        SendMailsOnebyOneAsync().GetAwaiter().GetResult();

    }


    public static async Task SendMailsOnebyOneAsync()
    {
        for (int i = 0; i < 1000; i++)
        {
            try
            {
                using (SmtpClient sMail = new SmtpClient("XXX"))
                {
                    sMail.DeliveryMethod = SmtpDeliveryMethod.Network;
                    sMail.UseDefaultCredentials = false;
                    sMail.Credentials = null;

                    var fromMailAddress = new MailAddress("XXX");
                    var toMailAddress = new MailAddress("XXX");

                    MailMessage message = new MailMessage(fromMailAddress, toMailAddress)
                    {
                        Subject = "test"
                    };

                    await sMail.SendMailAsync(message);

                    Console.WriteLine("Sent {0}", i);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }

有时该方法会挂起 - 它等待 SendMailAsync 似乎卡住了并​​且没有返回。

我看到一个相关问题 SmtpClient SendMailAsync sometimes never returns . 但是没有建议的修复对我有用。

当我尝试使用同步方法 SmtpClient.Send 时一切正常,应用程序永远不会挂起。

有人知道哪里出了问题吗?

最佳答案

我的同事向我指出 SmtpClient 实际上已经过时,Microsoft 建议不要使用它。

请参阅以下内容 link .

     ************ Update ***********

我已尝试按照链接中的建议使用 MailKit。 对于非异步异步 发送,相同的场景与MailKit 完美配合。

   **********************************

关于c# - 发送大量邮件时 SmtpClient.SendMailAsync 方法挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54581992/

相关文章:

C# -> 代码看代码

c# - 无尽的异步和等待?

winforms - 为什么在 WindowsFormsSynchronizationContext 中等待时 mstest 会挂起?

.net - 异步ServiceController.WaitForStatus如何做?

asp.net - System.Net.Mail.SmtpFailedRecipientException : Mailbox name not allowed

c# - 为什么我在发送 SMTP 电子邮件时收到“"' 属性无法分配”?

c# - 无法在 C# 中加载类型

c# - 防止 double.Parse 删除小数点后的尾随零?

c# - 端口号和SSL/TLS有什么关系

c# - linq查询c#中的内部选择查询