ASP.NET Email подписка - PullRequest
       4

ASP.NET Email подписка

0 голосов
/ 03 ноября 2011

У меня есть база подписчиков электронной почты; ок. 1800 в списке. У нас есть собственный обменный сервер. Я использую код ниже, чтобы захватить каждый адрес электронной почты из БД и отправлять электронную почту, по одному за раз. Для этого я использую веб-форму ASP.NET 4.0.

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

Я также получаю необработанное сообщение об ошибке в журнале сервера:

Код события: 3001 Сообщение о событии: запрос был прерван.

// Call data access method via business class
TaxSalesBusiness bizClass = new TaxSalesBusiness();
DataSet ds = bizClass.GetSubscribers();

foreach (DataRow row in ds.Tables[0].Rows)
{
    // Check well-formedness of each email adddress
    if (!IsWellformedEmailAddr(row["Email"].ToString()))
    {
        // Ignore and log mal-formed email address
        LogError(row["Email"].ToString() 
           + " is a malformed email address. Message was not sent to this subscriber " 
           + row["Name"].ToString() + ".", "");
        continue;
    }
    else
    {
        string toAddress = row["Email"].ToString();
        smtpClient.Send(fromAddress, toAddress, message.Subject, message.Body); 
    }
} 

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

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

Этот подход поможет вам избежать проблем с производительностью на вашем веб-сайте и может доставить письмабыть более надежным.

1 голос
/ 03 ноября 2011

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

Да.

И вы можете SendAsync вместо ожидания отправки одного электронного письма перед отправкой следующего. Хотя я не знаю, насколько ваш сервер Exchange понравится.

Проблема с вашим текущим подходом заключается в том, что отправка 1800 электронных писем по одному займет много времени, а использование веб-страницы для выполнения такой длительной операции, вероятно, приведет к превышению времени ожидания запроса. Возможно, вы можете сделать это на странице async и запустить все в своем собственном потоке, но это только усложняет ситуацию больше, чем необходимо, когда вы можете идеально сделать это в консольном приложении с гораздо меньшим количеством код и осложнения. Помните принцип KISS.

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