我正在使用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秒,响应将是即时的,但是,我无法向用户提供有关电子邮件是否成功发送的信息。
答案 0 :(得分:0)
我们最近遇到了类似的问题,每个电子邮件都有4-5秒,我们需要发送多个不同的内容。客户的IT人员能够获得.protection.outlook.com:25服务器接受在同一域上运行的非ssl流量,并且花费的时间为1-1.5秒。这对于客户端而言足够快,其中一些UI显示我们正在处理。我们还尝试了一台本地服务器,它只有大约100毫秒,但他们并不想在他们的DC上运行该电子邮件服务。
由于我没有参与,我无法谈论此.protection.outlook.com服务器的设置细节,但如果您不想要它可能需要考虑依靠异步。