ASP.NET电子邮件订阅
我有一个电子邮件订阅者的数据库;约。 1800名单中。我们有我们自己的交换服务器。我使用下面的代码从数据库中获取每个电子邮件地址,并一次一个地发送电子邮件。我正在使用ASP.NET 4.0 Web窗体来执行此操作。ASP.NET电子邮件订阅
我注意到电子邮件正在发送时挂起的页面。什么是实现这个最好的方法 - 使用控制台应用程序?我将如何去测试像这样的压力测试?
我也是在服务器日志得到一个未处理的错误消息:
事件代码:3001 事件消息:请求已经中止。
// Call data access method via business class
TaxSalesBusiness bizClass = new TaxSalesBusiness();
DataSet ds = bizClass.GetSubscribers();
foreach (DataRow row in ds.Tables[0].Rows)
{
// Check well-formedness of each email adddress
if (!IsWellformedEmailAddr(row["Email"].ToString()))
{
// Ignore and log mal-formed email address
LogError(row["Email"].ToString()
+ " is a malformed email address. Message was not sent to this subscriber "
+ row["Name"].ToString() + ".", "");
continue;
}
else
{
string toAddress = row["Email"].ToString();
smtpClient.Send(fromAddress, toAddress, message.Subject, message.Body);
}
}
另一个(更稳定的)解决方案可能是将邮件转发到(数据库?)队列,并且有一个稍后排队的Windows服务轮询。如果队列中有新事物,则Windows服务负责发送电子邮件。
此方法将帮助您清除网站中的性能问题,并且可以使邮件的传递更加可靠。
这是一个很好的观点。如果使用Sql Server,他可以非常容易地在Sql Server中发送电子邮件:http://stackoverflow.com/questions/7265494/sql-server-send-email/7265512#7265512 – Icarus
只是为了澄清:这个列表是email-每隔几年爆炸一次;例如,某人仅订阅电子邮件就不会生成电子邮件。此外,我正在使用SQL Server 2000 - 所以不确定任何电子邮件功能的限制。 – IrishChieftain
+1,谢谢。测试所有正在发送的电子邮件的最佳方式是什么? – IrishChieftain
@IrishChietain:我想你会问,因为你想异步发送它们......你可以保留一个计数器,因为你事先知道了你有多少条记录(即'int totalEmailsToSend = ds.Tables [0] .Rows.Count' )。当调用回调方法时,您可以增加计数器。一旦他们都是平等的(totalEmailsToSend和你的柜台),你知道你已经完成了。 – Icarus