Отправка большого количества писем с помощью SmtpClient (C #) занимает очень много времени - PullRequest
5 голосов
/ 18 апреля 2010

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

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

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

  • Разве это не должно быть асинхронным?

Ответы [ 3 ]

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

Может быть несколько проблем:

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

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

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

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

Используйте SmtpClient.SendAsync вместо SmtpClient.Send.

1 голос
/ 18 апреля 2010

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

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