Ответ 1
По-видимому, эта проблема решена только путем увеличения размера очереди на моем стороннем SMTP-сервере. но ответ Nip звучит так, как будто это тоже полезно.
вот мой код
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 & исключение)
По-видимому, эта проблема решена только путем увеличения размера очереди на моем стороннем SMTP-сервере. но ответ Nip звучит так, как будто это тоже полезно.
Ну, "отказ от отправки электронной почты", мы надеемся, будет немного более подробным. Но есть несколько вещей, которые могут вызвать это.
Независимо от того, является ли это одной из этих или других ошибок, вам нужно посмотреть на исключение и внутреннее исключение, чтобы получить более подробную информацию.
У меня возникла такая же проблема при отправке электронной почты большого объема. Установка свойства deliveryMethod
на PickupDirectoryFromIis
исправила его для меня.
Также не создавайте новый SmtpClient каждый раз.
какая ошибка вы получаете, это исключение SmtpFailedrecipientException? если это так, вы можете проверить список innerexceptions и просмотреть StatusCode, чтобы получить дополнительную информацию. ссылка ниже содержит некоторую полезную информацию.
Изменить для новой информации
Это проблема с поиском вашего SMTP-сервера из того, что я вижу, хотя вы говорите, что это происходит только на некоторых электронных письмах. Используете ли вы более одного SMTP-сервера, и если возможно, вы можете перевести проблему до одного, в частности, если не может быть, что скорость/количество отправляемых вами сообщений вызывает серьезную проблему с вашим SMTP-сервером.
Для нас все было в порядке, электронные письма очень маленькие, и не многие из них отправляются и потаенно давали эту ошибку. Оказалось, что технический специалист установил ASTARO, который предотвращал отправку электронной почты. и мы получили эту ошибку, так что да, ошибка немного загадочна, но я надеюсь, что это может помочь другим.
Увидев ваш цикл для отправки сообщений электронной почты, и ошибка, которую вы предоставили, есть только решение.
Объявите почтовый объект из цикла и назначьте fromaddress
из цикла, который вы используете для отправки писем. Поле 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 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();
Эта ошибка может появиться, если веб-сервер не может получить доступ к почтовому серверу. Убедитесь, что веб-сервер может связаться с почтовым сервером, например, пинговать его.