【发布时间】:2011-02-21 04:38:57
【问题描述】:
我正在使用 ASP.NET Web 表单,
当用户提交页面时,会向许多人发送一封电子邮件,这会减慢回发速度,
在不减慢页面重新加载速度的情况下发送电子邮件的最佳方式是什么?
谢谢
【问题讨论】:
-
您使用的是哪个版本的 .Net? 4.0 的答案与 3.5 不同。
-
在我的电脑上是 4。但我需要 3.5
我正在使用 ASP.NET Web 表单,
当用户提交页面时,会向许多人发送一封电子邮件,这会减慢回发速度,
在不减慢页面重新加载速度的情况下发送电子邮件的最佳方式是什么?
谢谢
【问题讨论】:
您可以使用 System.Net.Mail.SmtpClient 类通过 SendAsync() 方法发送电子邮件。
var smtpClient = new SmtpClient();
var message = new MailMessage(fromAddress, toAddress, subject, body);
smtpClient.SendCompleted += new SendCompletedEventHandler(OnSendCompletedCallback);
smtpClient.SendAsync(message, null); // Null Or pass a user token to be send when the send is complete
如果您需要在异步发送完成后处理一些额外的事情,您也可以订阅 SmtpClient 的 SendCompleted 事件。
private void OnSendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
// Handle the callback if you need to do anything after the email is sent.
}
Here 是 MSDN 上文档的链接。
【讨论】:
我发现,除非您正在构建一个非常小的网站,否则最好从单独的 Windows 服务发送邮件。
例如,您的 Web 前端会将要发送的邮件记录在您的数据库中。这有一个很好的副作用,允许您还开发一个已发送文件夹、发件箱等。您的 Windows 服务会轮询邮件表并进行实际发送。
发送邮件可能会导致很多异常,可能会很慢,可能会超时,主机进程被占用等。在许多情况下,在后台处理它很有意义。
这里有更多关于Windows Services的信息。
【讨论】: