Отправка 2000 писем
Можно ли один раз создать экземпляр SMTP-клиента и синхронно отправить 2000 писем?
Мы получаем следующую ошибку при создании экземпляра SMTP-клиента для каждого отправляемого сообщения с использованием кода, также вставленного в конце этого сообщения:
System.Net.Mail.SmtpException: служба недоступна, закрытие канала передачи. Ответ сервера: 4.4.1 Тайм-аут соединения
Я подозреваю, что создание экземпляра SMTP-клиента для каждого сообщения вызывает это, но не уверен. Код как ниже.
List<MailMessage> messages = GetMailMessages();
foreach( MailMessags m in messages)
{
try
{
SmtpClient client = new SmtpClient();//SHOULD THIS BE PLACED OUTSIDE AND BEFORE THE LOOP
client.Send(m);
}
catch (Exception)
{
throw;
}
}
РЕДАКТИРОВАТЬ 1:
Я только что нашел это на MSDN. (http://msdn.microsoft.com/en-us/library/ee706942%28v=vs.110%29.aspx). Таким образом, урок заключается в том, что при использовании массовой электронной почты вы должны создать экземпляр SMTP-клиента только один раз и повторно использовать его для всех множественных сообщений MailMessages.
Соединение, установленное текущим экземпляром класса SmtpClient с SMTP-сервером, можно использовать повторно, если приложение желает отправить несколько сообщений на один и тот же SMTP-сервер. Это
особенно полезно при использовании аутентификации или шифрования для установления соединения с SMTP-сервером. Процесс аутентификации и установления сеанса TLS может быть дорогостоящим процессом. Требование восстановления соединения для каждого сообщения при отправке большого количества сообщений на один и тот же SMTP-сервер может оказать существенное влияние на производительность. Существует ряд приложений для работы с большими объемами электронной почты, которые отправляют обновления состояния электронной почты, рассылки новостей или уведомления по электронной почте.