Отправка более 20 000 писем с помощью asp.net - PullRequest
7 голосов
/ 12 апреля 2010

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

Я мог бы сделать это зацикливанием на SmtpClient, но я боюсь, что с числами, которые я пытаюсь отправить, я в конечном итоге столкнусь с проблемами тайм-аута или из-за нехватки ресурсов машины. *

На данный момент я просто ищу предложения о лучшем способе справиться с этим, или, если зацикливание на SmtpClient - правильное решение, как мне поступить, чтобы предотвратить то, что я написал выше.

Будет ли веб-служба лучшей альтернативой?

Пожалуйста, сообщите, ТИА

Ответы [ 5 ]

11 голосов
/ 12 апреля 2010

Мое предложение было бы сделать это. Не пытайтесь запускать код ASP.NET для создания электронных писем размером 20 Кб и отправлять их, поскольку у вас есть проблемы с тайм-аутом и производительностью. Вместо этого заполните таблицу получателем, темой, телом и начните пакетный процесс из службы Windows. Таким образом, ваш код выполняется таким образом, что можно управлять лагом, вместо того, чтобы веб-страница ждала запроса на возврат.

6 голосов
/ 12 апреля 2010

Хорошо, во-первых - это вряд ли много, я обработал 50 000 писем +

Пусть письма будут записаны в каталог FOLDER. Затем используйте локальный SMTP-сервис, который вы можете установить, указав его в папке в качестве каталога раскладки. Это по крайней мере обеспечит наличие достаточного буфера между ними (т. Е. Вы можете завершить работу на стороне asp.net, пока электронные письма не отправляются в этот момент).

2 голосов
/ 13 апреля 2010

Как насчет использования Database Mail инструмента, предоставляемого SQL Server . Вы по-прежнему можете использовать asp.net, но электронная почта будет отправляться SQL Server, и все, что вам нужно сделать, это вызвать хранимую процедуру и оставить ее для SQL Server.

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

Утилита Database Mail также предоставляет параметры очереди и приоритета. Если возникнет проблема, электронная почта будет снова поставлена ​​в очередь и отправлена ​​позже, но остальные будут отправлены.

Он называется База данных Mail в SQL Server 2008 и SQL Mail в предыдущих версиях.

Для получения дополнительной информации, пожалуйста, проверьте ссылки ниже:

0 голосов
/ 12 апреля 2010

Вам не нужен веб-сервис, а скорее способ пакетирования электронных писем в очередь (возможно, таблица «Email_Queue» в БД). Затем служба Windows, работающая на сервере, может считывать очередь по принципу «первым пришел / первым обслужен» с разумным количеством порций, одновременно отправляемых SMTPClient, удаляя элементы из очереди по мере их обработки. Возможно, вам потребуется выполнить некоторые измерения, чтобы определить размер и задержку блока для вашего почтового сервера.

0 голосов
/ 12 апреля 2010

Вы можете использовать javascript на таймере, чтобы запросить скрипт, который отправляет почту небольшими порциями, которые не будут задерживаться Затем вы вызываете скрипт из браузера. Добавить индикатор выполнения, аутентификацию и т. Д.

...