При отправке большого почтового использования SmtpClient (C#) берет очень долго через некоторое время

Я использую эту часть кода для отправки почты:

SmtpClient client = new SmtpClient();
client.Host = smtpServer;
client.Send(mailMessage);

Если я инициировал этот код десять раз, то после того, как некоторая сотня писем, отправляя почту занимает 10 секунд... Могла быть очередь, вовлеченная здесь?

  • Разве это не должно быть асинхронным?
5
задан Lieven Cardoen 18 April 2010 в 12:32
поделиться

3 ответа

Может возникнуть несколько проблем:

Правильно ли вы удаляете объекты MailMessage? Если вы посмотрите, объект реализует IDisposable и, следовательно, от него следует избавиться. (Думаю, из-за потенциальных привязанностей.) Я бы начал здесь.

Вы говорили с администратором сервера. Может быть какой-то механизм дросселирования, который обнаруживает, что вы отправляете так много писем в быстрой последовательности.

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

2
ответ дан 14 December 2019 в 19:07
поделиться

Может быть, почтовый сервер ограничивает ваши запросы? Я отправляю почту с помощью локального SMTP-сервера IIS, и «отправка» почты занимает очень мало времени для .NET, даже когда у меня тысячи сообщений отправлены в течение нескольких минут (обработчик исключений пошел не так: P), но они могут обрабатываться очень медленно с помощью IIS, и иногда может потребоваться несколько часов, чтобы очистить почтовую очередь IIS

1
ответ дан 14 December 2019 в 19:07
поделиться

Используйте SmtpClient.SendAsync, а не SmtpClient.Send.

2
ответ дан 14 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: