使用Office 365的极慢的SmtpClient

时间:2017-02-06 21:11:58

标签: 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));

该网站不会被卡住&#34; 13秒,响应将是即时的,但是,我无法向用户提供有关电子邮件是否成功发送的信息。

1 个答案:

答案 0 :(得分:0)

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

由于我没有参与,我无法谈论此.protection.outlook.com服务器的设置细节,但如果您不想要它可能需要考虑依靠异步。