创建邮件列表以在asp.net中发送群发电子邮件

时间:2012-03-26 06:42:45

标签: c# asp.net sql-server

我想通过asp.net创建一个邮件列表。我已经研究了很多关于它的文章。但是所有这些都是一样的。在那篇文章写的我应该使用这个代码

var list = from c in context.Emails orderby c.EmailAddress select c.EmailAddress;
MailMessage mail = new MailMessage();
foreach (var c in list)  
{  
    try
    {

        mail.From = new MailAddress(txtfrom.Text);
        mail.To.Add(new MailAddress(c.ToString()));
        mail.Subject = txtSub.Text;
        mail.IsBodyHtml = true;
        mail.Body = txtBody.Text;
        if (FileUpload1.HasFile)
        {
            mail.Attachments.Add(new Attachment(FileUpload1.PostedFile.InputStream, FileUpload1.FileName));
        }
        SmtpClient smtp = new SmtpClient();
        smtp.Send(mail); 
    }
    catch (Exception)
    {

    }
}

所以问题是,这种方式发送大量电子邮件真的很有用吗? (例如2000封电子邮件?) 在那些文章中写道,我应该在每个时期之后延迟(例如在发送50封电子邮件之后)。我想知道如何在发送电子邮件之间延迟。 我正在寻找一种完美的方式来创建这个项目 我想知道是否有人在asp.net中给我开源邮件列表

5 个答案:

答案 0 :(得分:1)

我会像这样更改代码

var list = from c in context.Emails orderby c.EmailAddress select c.EmailAddress;
MailMessage mail = new MailMessage();
try
{

    mail.From = new MailAddress(txtfrom.Text);
    foreach (var c in list)  
    {  
        mail.To.Add(new MailAddress(c.ToString()));
    }
    mail.Subject = txtSub.Text;
    mail.IsBodyHtml = true;
    mail.Body = txtBody.Text;
    if (FileUpload1.HasFile)
    {
        mail.Attachments.Add(new Attachment(FileUpload1.PostedFile.InputStream, FileUpload1.FileName));
    }
    SmtpClient smtp = new SmtpClient();
    smtp.Send(mail); 
}
catch (Exception)
{
    //exception handling
}

至少,smtp.Send()只被调用一次。

答案 1 :(得分:0)

尝试使用多个线程,这是一个例子; msdn forum sendin bulk mails

答案 2 :(得分:0)

你可能有一些运行脚本的时间限制(即30秒)。我建议分成两步:

  1. 格式化您需要的电子邮件并将其写入数据库表(状态为“未发送”)
  2. 运行另一个脚本/程序,从表中选择 N 电子邮件,发送并将其标记为“已发送”
  3. 等待/睡眠 N
  4. 重复第二步
  5. 这使您可以发送几乎无限数量的电子邮件,没有超时 另外 - 如果您在托管上每小时/每天发送电子邮件有一些限制,请注意!

答案 3 :(得分:0)

为要发送的电子邮件创建工作项并将其推送到队列。然后使用尽可能多的竞争消费者(也就是工人)来发送这些电子邮件。

答案 4 :(得分:0)

asp app只需要用信息创建一个XML并保存。

使用带有filewatcher的Windows服务。此服务仅检测以XML格式创建列表并发送它。