Назад | Перейти на главную страницу

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

Я использую этот фрагмент кода для отправки письма:

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

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

Похоже, что почтовый сервер форсирует эту задержку, вероятно, чтобы избежать спама: http://en.wikipedia.org/wiki/Tarpit_(networking).

Какой почтовый сервер вы используете? Как это настроено? Используете ли вы SMTP с проверкой подлинности или без проверки подлинности для отправки писем?

Как сказал Массимо, многие умные SMTP-серверы имеют возможность ограничения. Он также может быть ограничен внешним по отношению к SMTP-серверу с помощью регулирования сети.

Если ваш код блокируется, вы должны отправить его асинхронно. Вы можете использовать метод .SendAsync () в SmtpClient, который мне не нравится, или использовать что-то вроде SmartThreadPool для создания цепочки для каждого сообщения.

Если вы отправляете их асинхронно, вы не сможете заключить сообщение в оператор using (), поэтому вам нужно будет вызвать .Dispose () в MailMessage, иначе возникнут проблемы с ресурсами.