【问题标题】:SendMailAsync Never Returns, Still Sends MailSendMailAsync 永不返回,仍然发送邮件
【发布时间】:2016-09-09 17:22:12
【问题描述】:

我正在通过 C# 的 SmtpClient.SendMailAsync 发送邮件,但我遇到了一些非常奇怪的行为。

当我拨打SendMailAsync 时,电子邮件已发送 - 我每次都会收到。但是,我的应用程序永远不会返回。它似乎挂在await 上,我对它为什么不返回没有任何真正的见解。如果我改用Send,邮件会立即发送,当然,一切都会按照我的预期完成。

这是我实际发送电子邮件的来源。

public async Task SendEmailAsync(string toAddress, string subject, string message)
{
    using (var client = new SmtpClient(configuration["Email:Host"], Convert.ToInt32(configuration["Email:Port"])))
    using (var mailMessage = new MailMessage(configuration["Email:FromAddress"], toAddress, subject, message))
    {
        client.Credentials = new NetworkCredential(configuration["Email:Username"], configuration["Email:Password"]);
        client.EnableSsl = true;

        mailMessage.IsBodyHtml = true;

        try
        {
            await client.SendMailAsync(mailMessage);
        }
        catch (SmtpException)
        {
            throw;
        }
    }
}

其他一些可能有用也可能没有帮助的信息是我通过 AWS SES 发送这些电子邮件。无论我发送到哪个地址,都会发生同样的问题。我的链在调用堆栈中一直是异步的。我在 OSX、ASP.NET Core 1 上运行。

【问题讨论】:

  • 外部SendEmailAsync方法在哪里调用?
  • @FedericoDipuma 如果你指的是SendEmailAsync的调用者方法,它是一个名为async Task<IActionResult> CreateAndAssign(...)的异步MVC控制器动作。
  • 您提到您在 OSX 上运行该应用程序,您能否隔离问题并验证它是否也在 Windows 机器中出现?
  • @FedericoDipuma 是的,让我让我的其他一位运行 Windows 的团队成员试用一下。我会让你知道。顺便说一句 - 如果我不await client.SendMailAsync 而只是让任务返回,事情似乎可以正常完成。不知道这是否有什么不同。收到同事的更新后,我会立即发布。谢谢。
  • 如果您使用Kestrel 作为服务器,则此issue on GitHub 可能与您的奇怪行为有关。您可以尝试将ConfigureAwait(false) 添加到您对client.SendMailAsync(mailMessage) 的呼叫中,看看会发生什么。

标签: c# asp.net email asp.net-core


【解决方案1】:

这似乎是一个错误 - 根据与 cmets 中 Federico Dipuma 的讨论,可能在 OSX 上使用 Kestrel。解决方法是不要异步发送邮件。

除非可以发现更多信息,否则将其标记为答案。

【讨论】:

  • 您好,先生,很抱歉恢复此线程。但我也有同样的问题。当我运行我的程序时,它工作正常,但是当我托管我的网站时,邮件正在发送,但 SendMailAsync 永远不会返回。我是这种东西的新手,希望您能帮助我,先生,提前谢谢您。这是我的控制器:pastie.org/10907763
猜你喜欢
  • 1970-01-01
  • 2016-09-30
  • 2016-11-18
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
相关资源
最近更新 更多