Отправка электронных писем с ASP.NET - PullRequest
1 голос
/ 13 декабря 2010

Я создаю веб-сайт, и клиент хочет, чтобы на нем существовала система новостей.Как я могу отправлять такие массовые (> 1000) электронные письма?

Я где-то читал, что использование метода sendasync в smtpclient помогает.Но это постоянно дает мне исключение «Email faliure».И я не знаю, что делать с этим прямо здесь ...

Итак, в основном мой вопрос, можно ли отправлять электронные письма, используя метод SEND smtpclient, но каждое письмо в этомсобственный поток.

например,

   NewsletterEmail newsletterEmail = new NewsletterEmail(emailAdress[i], mailSubject, mailBody);
    Thread t = new Thread(new ThreadStart(newsletterEmail.MakeAndSendEmail));
    t.IsBackground = true;
    t.Start();

Ответы [ 6 ]

3 голосов
/ 13 декабря 2010

Расскажите своему клиенту о Постоянный контакт .Они справятся с этим гораздо лучше, чем вы когда-либо могли.Это также дешевле, чем ваше время.

В случае неудачи у вас есть несколько вариантов.

Если у них уже есть сервер электронной почты, используйте это для трансляции электронной почты.Другими словами, ретранслируйте почту через этот сервер.

Если вы не можете этого сделать, скачайте бесплатный почтовый сервер.Я использую hMailserver .Настройте его и передайте через него.

Если вы не можете этого сделать, напишите свой собственный механизм обработки SMTP.Не пытайтесь отправлять электронные письма непосредственно из ASP.Net.Поставьте их в очередь в базе данных и напишите службу windows для обработки почтовых рассылок.

Отправка электронной почты иногда может занять несколько секунд на одну электронную почту.Это может полностью повлиять на ваш сайт, пока он пытается обработать 1000 электронных писем.

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

Далее, получение DNSнадлежащим образом настроенный может быть PITA.Вот почему я предлагаю постоянный контакт .У меня есть один клиент, которому понадобилось почти 5 лет, чтобы наконец настроить свой DNS;и да, я давал им четкие инструкции раз в год о том, что делать.Обратный DNS имеет решающее значение.

Другое дело, что некоторые серверы получателей имеют ограничение на количество потоков, которые они будут принимать от вас одновременно.Большинство почтовых серверов созданы, чтобы принять это во внимание.Если вы пересекаете эту границу, то серверы получателей сочтут вас спамером и предпримут соответствующие действия.

Еще одна проблемная область - многократная отправка на неправильный адрес.AOL и другие будут считать вас спамером только для этого.

Дело в том, что вы действительно не хотите писать это сами.

3 голосов
/ 13 декабря 2010

я думаю, вам следует подумать о том, как вы отправляете массовые письма

Создание> 1000 потоков не очень хорошая идея, это может даже привести к сбоям в работе вашего сервера или может сделать ваш сервер очень медленным.

2 голосов
/ 13 декабря 2010

Лучше всего, чтобы отдельный процесс отправлял электронные письма.Либо он запускается по расписанию, чтобы проверять наличие электронных писем, которые необходимо отправить (может быть, хранить электронные письма в таблице?), Либо, если вам не нравится идея запланированного процесса, вы можете запустить консольное приложение.на вашем веб-сайте.

Еще один момент, о котором следует помнить: если вы отправляете слишком много писем за короткий промежуток времени, становится очень легко попасть в черный список, а затем ни одно из писем с вашего доменасделает это на любых серверах, которые вы в черном списке.

0 голосов
/ 23 декабря 2010

Посмотрите API MailChimp: http://www.mailchimp.com/api/gettingstarted/

0 голосов
/ 13 декабря 2010

Я построил подобную систему год или два назад.Есть так много вещей, которые могут пойти не так, когда вы отправляете электронное письмо программно.По этой причине сделайте себе одолжение и отделите сообщения от процесса их отправки.Таким образом, вы можете «научить» свою систему, что «badEmail@goodDomian.com» следует игнорировать или в других подобных ситуациях.

Вы можете сохранить сообщение, тему или любой другой уровень разделения данных, который вы хотите, в базе данных вместе с флагом для метаданных, таких как «SentOn», «FailedOn» и т. Д.в то время, чтобы отдельные ошибки были сохранены и / или обработаны.Я использовал SmtpMail.Send () , но какой бы метод вы ни выбрали, он должен работать, если вы создали что-то умное и восстанавливаемое.

0 голосов
/ 13 декабря 2010

Я выбрал два подхода:

1) Ленивый, неаккуратный подход к настройке времени ожидания процесса asp.net, достаточного для завершения через Send

2) Создание консольного приложенияпорождается веб-приложением.

...