Разделение одной массовой рассылки на несколько - PullRequest
1 голос
/ 16 февраля 2012

У нас есть веб-сайт, и мы только что столкнулись с проблемой при попытке отправить 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);
}  

Есть еще идеи?

1 Ответ

1 голос
/ 16 февраля 2012

Это определенно одна из тех смущающих параллельных задач , которые извлекут большую выгоду из параллелизма.

В .NET 4.0 этот код можно запускать параллельно, просто используя метод Parallel.ForEach .

Предполагая, что messages - это последовательность объектов, содержащих Receiver, Subject и Body отправляемых электронных писем, в этом примере для автоматической отправки используется параллельная библиотека задач как можно больше из них параллельно, учитывая ресурсы, доступные на машине:

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 , чтобы вручную планировать отправку электронных писем по разным потокам, но это определенно потребует больше усилий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...