MVC 5.1,.NET 4.5
在我们简单的网站中,我们需要发送电子邮件。我们的电子邮件服务由Post back事件调用,它发送电子邮件,然后构建结果页面并将其返回。
这会降低页面速度,因为页面必须等待发送同步电子邮件。
如果我们在另一个线程中运行电子邮件,网站是否可以继续创建页面并在处理电子邮件时将其返回给用户,或者长时间运行的任务是否会导致页面无法呈现。 / p>
基本上,出于性能原因,我是否可以发送非阻止电子邮件。
注意:我们无法将电子邮件请求发送到服务或其他系统。
答案 0 :(得分:3)
假设您使用内置SmtpClient
,则可以使用SmtpClient.SendMailAsync
方法
smtpClient.SendMailAsync(new MailMessage{ ... });
将指定的消息发送到SMTP服务器以作为异步操作
进行传递
答案 1 :(得分:2)
调用StartNew在功能上等同于使用其构造函数之一创建任务,然后调用Task.Start方法来安排任务执行。
Task.Factory.StartNew(() => {
//do somethings
});
示例:
Task.Factory.StartNew(() => {
SendMail("Hello world", "email@yahoo.com", "TEST");
});
public static bool SendMail(string subject, string to, string body)
{
string fromMailAddress = ConfigurationManager.AppSettings["MailAddress"];
string fromMailPassword = ConfigurationManager.AppSettings["MailPassword"];
string fromMailName = ConfigurationManager.AppSettings["MailName"];
var networkConfig = new NetworkCredential(fromMailAddress, fromMailPassword);
var mailServer = new SmtpClient()
{
Host = ConfigurationManager.AppSettings["SmtpHost"],
UseDefaultCredentials = false,
Credentials = networkConfig
};
if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["SmtpPort"]))
mailServer.Port = Convert.ToInt32(ConfigurationManager.AppSettings["SmtpPort"]);
var message = new MailMessage()
{
Subject = subject,
SubjectEncoding = Encoding.UTF8,
IsBodyHtml = true,
BodyEncoding = Encoding.UTF8,
};
//message send config
message.To.Add(new MailAddress(to));
message.From = new MailAddress(fromMailAddress, fromMailName);
message.Body = body;
try
{
mailServer.SendAsync(message, null);
}
catch (Exception ex)
{
return false;
}
return true;
}