Как вы отправляете массовые письма от ASP.NET? - PullRequest
7 голосов
/ 05 мая 2011

Я создал веб-сайт для клиента, и ему нужен специальный инструмент для рассылки новостей. Создать инструмент было легко, но я не уверен, как отправить электронное письмо.

Я настроил тестовую страницу и смог отправить мне тестовое письмо, используя пространство имен System.Net.Mail. Я попытался применить этот код к циклу на странице новостной рассылки, но это оказалось довольно сложной задачей. Цикл отправки электронной почты блокирует весь сайт примерно на час, пока он отправляет свои электронные письма. Иногда это прерывает цикл на полпути, и некоторые письма не отправляются.

Я попытался запустить цикл в другом потоке.

protected void btnSendNewsletter_Click(object sender, EventArgs e)
{
    Thread t = new System.Threading.Thread(new ThreadStart(SendEmails));
    t.Start();
}

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

Я очень новичок в области электронной почты в .NET, поэтому любая помощь очень ценится.

1 Ответ

6 голосов
/ 05 мая 2011

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

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

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