Smtpclient "отказ отправки почты"

вот мой код

for(int i = 0; i < number ; i++)
{
MailAddress to = new MailAddress(iMail.to);
MailAddress from = new MailAddress(iMail.from, iMail.displayName);
string body = iMail.body;
string subject = iMail.sub;
oMail = new MailMessage(from, to);
oMail.Subject = subject;
oMail.Body = body;
oMail.IsBodyHtml = true;
oMail.Priority = MailPriority.Normal;
oMail.Sender = from;
s = new SmtpClient(smtpServer);
if (s != null)
{
 s.Send(oMail);
}
oMail.Dispose();
s = null;
}

этот цикл отправляет более 60 000 писем. но моя проблема в том, что я получаю "отказ от отправки почты" в некоторых сообщениях по электронной почте несколько раз в 5000 и некоторое время меньше, чем остальные из них доставляются. и у меня есть проверка всех этих сообщений об ошибке, у которых есть действительный адрес электронной почты. не знаю, в чем проблема. Мне действительно нужна помощь в этом.

Изменить: Это мое исключение Трассировка

Ошибка - отправка почты с ошибкой; внутренний Ex - System.IO.IOException: невозможно выполнить читать данные с транспорта соединение: net_io_connection закрыто. в System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(байт [] буфер, смещение Int32, чтение Int32, Boolean readLine) в System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader вызывающий, Boolean oneLine) при System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader вызывающего абонента) System.Net.Mail.CheckCommand.Send(SMTPConnection conn, String & ответ) в System.Net.Mail.MailCommand.Send(SMTPConnection conn, Byte [], String from) at System.Net.Mail.SmtpTransport.SendMail(MailAddress отправитель, MailAddressCollection получателей, String deliveryNotify, SmtpFailedRecipientException & исключение)

Ответ 1

По-видимому, эта проблема решена только путем увеличения размера очереди на моем стороннем SMTP-сервере. но ответ Nip звучит так, как будто это тоже полезно.

Ответ 2

Ну, "отказ от отправки электронной почты", мы надеемся, будет немного более подробным. Но есть несколько вещей, которые могут вызвать это.

  • Ограничения на адрес "От". Если вы используете разные адреса, некоторые могут быть заблокированы службой SMTP от возможности отправки.
  • Предотвращение наводнений на вашем SMTP-сервисе может прекратить выпуск электронных писем.

Независимо от того, является ли это одной из этих или других ошибок, вам нужно посмотреть на исключение и внутреннее исключение, чтобы получить более подробную информацию.

Ответ 3

У меня возникла такая же проблема при отправке электронной почты большого объема. Установка свойства deliveryMethod на PickupDirectoryFromIis исправила его для меня. Также не создавайте новый SmtpClient каждый раз.

Ответ 4

какая ошибка вы получаете, это исключение SmtpFailedrecipientException? если это так, вы можете проверить список innerexceptions и просмотреть StatusCode, чтобы получить дополнительную информацию. ссылка ниже содержит некоторую полезную информацию.

MSDN

Изменить для новой информации

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

Ответ 5

Для нас все было в порядке, электронные письма очень маленькие, и не многие из них отправляются и потаенно давали эту ошибку. Оказалось, что технический специалист установил ASTARO, который предотвращал отправку электронной почты. и мы получили эту ошибку, так что да, ошибка немного загадочна, но я надеюсь, что это может помочь другим.

Ответ 6

Увидев ваш цикл для отправки сообщений электронной почты, и ошибка, которую вы предоставили, есть только решение.
Объявите почтовый объект из цикла и назначьте fromaddress из цикла, который вы используете для отправки писем. Поле fromaddress получает назначение снова и снова в цикле, который является вашей проблемой.

Ответ 7

Пять лет спустя (надеюсь, что этот разработчик все еще не ждет исправления).

У меня была та же проблема, вызванная той же ошибкой: я объявлял SmtpClient внутри цикла.

Исправление прост - объявить его один раз, вне цикла...

MailAddress mail = null;
SmtpClient client = new SmtpClient();
client.Port = 25;
client.EnableSsl = false;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = true;
client.Host = smtpAddress;       //  Enter your company email server here!

for(int i = 0; i < number ; i++)
{
    mail = new MailMessage(iMail.from, iMail.to);
    mail.Subject = iMail.sub;
    mail.Body = iMail.body;
    mail.IsBodyHtml = true;
    mail.Priority = MailPriority.Normal;
    mail.Sender = from;
    client.Send(mail);
}
mail.Dispose();
client.Dispose();

Ответ 8

Эта ошибка может появиться, если веб-сервер не может получить доступ к почтовому серверу. Убедитесь, что веб-сервер может связаться с почтовым сервером, например, пинговать его.