我在 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/