如何向超过15000个收件人发送邮件?
|
我们在c#中使用asp.net 3.5,我们必须制作一个功能强大的mailer模块,该模块可以邮寄超过15000个收件人或简而言之DBMS中的所有记录。
1)我们有一个向单个收件人发送邮件的代码。我们将如何向多个收件人发送邮件。我尝试使用我们的代码通过\',\'添加多个电子邮件ID,但仅发送第一个电子邮件ID。这是代码示例
public bool Mail(string to, string subject, string body)
{
try
{
MailMessage objEmail = new MailMessage();
objEmail.To =to;
objEmail.From = \"Support@xyz.com\";
//objEmail.Priority =priority
objEmail.Subject = subject;
objEmail.Body = body;
//enable the Html tag...
objEmail.BodyFormat = MailFormat.Html;
objEmail.Priority = MailPriority.High;
SmtpMail.SmtpServer = \"localhost\";
try
{
SmtpMail.Send(objEmail);
return true;
}
catch(Exception ex)
{
string error = ex.StackTrace;
return false;
}
}
catch
{
return false;
}
}
2)一次发送邮件的最大限制是多少?我们可以在字符串中为包含emailid的值分配多少?
3)我们的代码主要是单击按钮,所以如果我们有15000条以上的记录,那么它将能够发送所有邮件,因为我们认为的是该页面将具有60秒的呈现时间,因此它可能只发送那些ID覆盖的邮件在60秒内
让我们提出什么是最好的方法。
提前致谢。
没有找到相关结果
已邀请:
3 个回复
埃庐
厘恼轨
呈辖玫割善
在某个时候,您将需要启动一个可以完成实际工作的线程或进程,但是有趣的是如何实现它。 使用SQL Server,您可以编写如下查询:
只能在以READ COMMITTED或REPEATABLE READ隔离级别运行的事务中指定READPAST。建立新连接时,将设置隔离级别。 现在将发生的事情是,当您使用“ 3”对象创建“ 4”对象时,SQL Server将锁定这些行。其他实例将无法获取它们。这意味着您现在可以有效地为外发电子邮件设置工作队列。但是,请务必记住,在进行处理时必须保持连接处于打开状态,否则将释放锁定。 需要注意的几件事。 您获取一堆行并将其发送。如果成功,则设置IsSent位 如果崩溃(在某处引发异常),则不会丢弃引发ErrorCount的电子邮件。您不删除它,只是增加计数。这很重要,因为如果电子邮件出于某种原因包含输入(而不是由网络连接问题引起),则它可能会继续崩溃以发送客户端,这被称为中毒,它将防止不良数据使发送客户端崩溃。因此,您应该忽略高ѭ5high的电子邮件 您也可以清空滚动时间表,并将
向前移动,以免一次又一次地吸引相同的事物。 瓶颈将是SmtpClient类,但是根据您希望发送电子邮件的速度,可以根据需要并行处理尽可能多的代理或线程。 优先级将确保如果您需要发送高优先级的电子邮件,则完整的队列不会成为问题。例如如果您想以这种方式发送所有电子邮件,只要队列具有更高的优先级,就不会因为密码已满而延迟发送密码重置或注册电子邮件。 但是要注意的一件事是,当发生错误时,原因是未知的,我已经看到偶尔的网络问题会导致电子邮件无法发送。这种方法通常会发生的情况是,仅当网络连接或SMTP服务器重新联机时,才会在以后发送电子邮件。您还可以使用其他元数据,以不向尝试重设其密码的用户发送多封电子邮件(仅由于某些未知原因,该电子邮件不会立即发送)。 最后一件事。您可能希望将表拆分为两个或三个相同的表。这样做的原因是,如果您想在一段时间内记录已发送的电子邮件,则不希望它们干扰您本来高性能的发送队列,因此您可以将它们移动到单独的表中,只是为了维护历史记录。处理错误的方法相同,如果电子邮件最终导致错误,则可能要记录该错误,然后可以通过将发送队列中的这些电子邮件移到错误队列中来进行记录。