c# - 使用 Office 365 的 SmtpClient 速度极慢

标签 c# asp.net-mvc email

我在 MVC5 网站上工作。该网站包含“联系我们”表格,用户可以在其中联系网站支持。

问题是 SendMailAsync 至少需要 10-13 秒才能完成(无附件),并且在此过程运行时,用户会卡住并等待服务器的响应 - 无论是邮件发送成功与否。

这是我当前的 ActionResult 方法:

[HttpPost]
public async Task<ActionResult> Contact(MessageModel Model)
{
    //...
    await SendMessage(Model);
    //...
    return View();
}

这是我负责发送电子邮件的方法:

private async Task SendMessage(MessageModel Model)
{
    var Message = new MailMessage();
    Message.From = ...;
    Message.To.Add(...);
    Message.Subject = ...;
    Message.IsBodyHtml = true;

    SmtpClient Client = new SmtpClient();
    Client.UseDefaultCredentials = false;
    Client.Credentials = ...;
    Client.Port = 587;
    Client.Host = "smtp.office365.com";
    Client.DeliveryMethod = SmtpDeliveryMethod.Network;
    Client.EnableSsl = true;

    await Client.SendMailAsync(Message);
}

有没有更快的替代方案?我可以这样运行它:

await Task.Factory.StartNew(() => SendMessage(Model));

网站不会“卡住”13秒,即时响应,但我无法向用户提供电子邮件是否成功发送的信息。

最佳答案

我们最近在一次事件注册中遇到了类似的问题,每封电子邮件需要 4-5 秒,而且我们需要发送多封不同内容的邮件。客户的 IT 人员能够让 .protection.outlook.com:25 服务器接受在同一域上运行的非 SSL 流量,这花费了 1-1.5 秒的时间。这对于具有一些 UI 的客户端来说已经足够快了,可以显示我们正在处理。我们还尝试了一个本地服务器,它只有大约 100 毫秒,但他们不想在他们的 DC 上运行该电子邮件服务。

由于我没有参与其中,因此我无法详细说明此 .protection.outlook.com 服务器的设置细节,但如果您不想依赖异步,则可能需要研究一下。

关于c# - 使用 Office 365 的 SmtpClient 速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42077330/

相关文章:

c# - 如何通过代码启用 URI 类的 IDN/IRI 支持?

ruby-on-rails - 在 Rails 中发送多封电子邮件的最佳方式是什么?

c# - Autofac + Automapper + 自定义 ValueResolver

asp.net-mvc - 增加 Azure Web 应用程序请求超时

c# - 如何在 View 首次加载时加载部分 View ?

c# - 外部身份验证失败时返回哪个 HTTP 状态?

php - 如何用php做一个 friend 推荐和奖励系统?

java - 如何从自定义 Gmail 域发送邮件?

c# - 尝试将 XML 内容存储到 SQL Server 2005 失败(编码问题)

c# - Range.Information 不工作 C#