Ove*_*ack 5 c# email asp.net-mvc
我正在开发 MVC5 网站。本网站包含“联系我们”表格,用户可以在其中联系网站支持。
问题是SendMailAsync 至少需要 10-13 秒才能完成(无附件),并且在此过程运行时,用户被卡住并等待服务器的响应 - 无论电子邮件是否成功发送。
这是我当前的 ActionResult 方法:
[HttpPost]
public async Task<ActionResult> Contact(MessageModel Model)
{
//...
await SendMessage(Model);
//...
return View();
}
Run Code Online (Sandbox Code Playgroud)
这是我负责发送电子邮件的方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
有没有更快的工作替代方案?我可以这样运行它:
await Task.Factory.StartNew(() => SendMessage(Model));
Run Code Online (Sandbox Code Playgroud)
该网站不会“卡住” 13 秒,响应将是即时的,但是,我无法向用户提供电子邮件是否成功发送的信息。
小智 1
我们最近在活动注册时遇到了类似的问题,每封电子邮件需要 4-5 秒,并且我们需要发送多封不同内容的邮件。客户的 IT 人员能够获得一台 .protection.outlook.com:25 服务器,该服务器接受在同一域上运行的非 ssl 流量,并且花费了 1-1.5 秒的时间。对于具有一些 UI 的客户端来说,这已经足够快了,可以显示我们正在处理。我们还尝试了本地服务器,只有大约 100 毫秒,但他们不想在他们的 DC 上运行该电子邮件服务。
由于我没有参与,所以我无法透露此 .protection.outlook.com 服务器的设置细节,但如果您不想依赖异步,则可能需要研究一下。