【问题标题】:Splitting one bulk email in to several将一封批量电子邮件拆分为多个
【发布时间】:2012-02-16 10:24:47
【问题描述】:

我们有一个网站,但在尝试批量发送 700 封电子邮件时遇到了问题。我认为最好发送 100 封电子邮件 7 次,但我应该采取哪种方法?

  • 我可以只使用 for 循环并发送电子邮件 7 次,但这种方法是否有任何问题,例如如果电子邮件数量翻倍?
  • 线程,我是新手,需要更多时间。

这是我的代码:

protected void btnClick_Send(object sender, EventArgs e)
{
     MailMessage mailObj = new MailMessage();
     mailObj.Bcc.Add(txtReciever.Text.Trim());
     mailObj.ReplyToList.Add("our-reply-email@oursite.com");
     mailObj.SubjectEncoding = System.Text.Encoding.UTF8;
     mailObj.BodyEncoding = System.Text.Encoding.UTF8;
     mailObj.Subject = txtSubject.Text;
     mailObj.Body += Environment.NewLine;
     mailObj.Body = txtContent.Text;
     mailObj.Body += Environment.NewLine;
     SmtpClient SMTPServer = new SmtpClient();
     SMTPServer.Send(mailObj);
}  

还有其他想法吗?

【问题讨论】:

  • 您使用的是哪个版本的 .NET?
  • 我现在是 2.0,但我想如果有必要我可以升级到 4。

标签: .net-2.0 bulk-email


【解决方案1】:

这绝对是那些embarrassingly parallel problems 之一,它将从并行性中受益匪浅。

在 .NET 4.0 中,您只需使用 Parallel.ForEach 方法即可让该代码并行运行。

假设messages 是包含要发送的电子邮件的ReceiverSubjectBody 的对象序列,此示例使用Task Parallel Library 自动发送尽可能多的电子邮件考虑到机器上可用的资源,它们尽可能并行

Parallel.ForEach(messages, message =>
{
     MailMessage mailObj = new MailMessage();
     mailObj.Bcc.Add(message.Receiver);
     mailObj.ReplyToList.Add("our-reply-email@oursite.com");
     mailObj.SubjectEncoding = System.Text.Encoding.UTF8;
     mailObj.BodyEncoding = System.Text.Encoding.UTF8;
     mailObj.Subject = message.Subject;
     mailObj.Body += Environment.NewLine;
     mailObj.Body = message.Body;
     mailObj.Body += Environment.NewLine;
     SmtpClient SMTPServer = new SmtpClient();
     SMTPServer.Send(mailObj);
}

当然,您也可以在 .NET 2.0 中实现相同的解决方案,例如使用ThreadPool.QueueUserWorkItem 方法手动安排电子邮件在不同线程上发送,但这肯定需要更多的努力。

【讨论】:

  • 这和for循环有什么区别?因为不知道所以问...
  • 常规循环将按顺序一次处理一个parallel loop 会自动将列表分解成块并同时处理它们。块的数量和大小取决于机器上可用的资源,例如 CPU 内核的数量。
猜你喜欢
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
相关资源
最近更新 更多