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 и некоторое время меньше, чем остальные из них доставляются. и я проверил все эти ошибки, электронная почта имеет действительный адрес электронной почты. не знаю в чем проблема. мне действительно нужна помощь.

Edit: это моя трассировка исключений

ошибка-Ошибка отправки почты.; Внутренний Экс - Системы.ИО.IOException: не удается считывание данных с транспорта подключение: net_io_connectionclosed. на Система.Сеть.Почта.SmtpReplyReaderFactory.ProcessRead (Байт[] буфер, типа int32 смещение, int32 и читать, Boolean readLine) at Система.Сеть.Почта.SmtpReplyReaderFactory.ReadLines (SmtpReplyReader caller, Boolean oneLine) at Система.Сеть.Почта.SmtpReplyReaderFactory.ReadLine (SmtpReplyReader caller) at Система.Сеть.Почта.Чеккоманд.Отправить (SmtpConnection conn, String & response) at Система.Сеть.Почта.MailCommand.Отправить (SmtpConnection conn, Byte [] команда, строка из) at Системы.Чистая.Почте.SmtpTransport.С Sendmail(Почтовый Адрес отправитель, MailAddressCollection получатели, строка deliveryNotify, SmtpFailedRecipientException& исключение)

8 ответов


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

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

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


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


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


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

MSDN

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

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


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


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


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

у меня была та же проблема, вызванная той же ошибкой: я объявлял 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's 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();

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