1

我们有一个网站,但在尝试批量发送 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);
}  

还有其他想法吗?

4

1 回答 1

1

这绝对是那些令人尴尬的并行问题之一,这将从并行性中受益匪浅。

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

假设这是一个包含,和要发送的电子邮件messages的对象序列,此示例使用任务并行库在给定机器上可用资源的情况下自动并行发送尽可能多的电子邮件:ReceiverSubjectBody

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方法手动安排电子邮件在不同线程上发送,但这肯定需要更多的努力。

于 2012-02-16T10:39:35.543 回答