16

这是我的代码

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_connectionclosed。在 System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte[] buffer, Int32 offset, Int32 read, Boolean readLine) at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller, Boolean oneLine) at System.Net.Mail.SmtpReplyReaderFactory .ReadLine(SmtpReplyReader caller) at System.Net.Mail.CheckCommand.Send(SmtpConnection conn, String& response) at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, String from) 在 System.Net。 Mail.SmtpTransport.SendMail(MailAddress 发件人、MailAddressCollection 收件人、String deliveryNotify、SmtpFailedRecipientException& 异常)

4

8 回答 8

13

好吧,“发送电子邮件失败”应该有更多的细节。但是有几件事可能会导致这种情况。

  1. “发件人”地址的限制。如果您使用不同的地址,则某些地址可能会被您的 SMTP 服务阻止而无法发送。
  2. 您的 SMTP 服务上的防洪功能可能会阻止电子邮件发送出去。

无论是其中一个错误还是其他错误,您都需要查看异常和内部异常以获取更多详细信息。

于 2010-02-05T19:09:06.840 回答
4

显然,仅通过增加我的 3rd 方 smtp 服务器上的队列大小就解决了这个问题。但是Nip的回答听起来也很有用

于 2010-03-09T23:12:29.687 回答
3

我在发送大量电子邮件时遇到了同样的问题。设置deliveryMethod属性PickupDirectoryFromIis为我修复它。也不要每次都创建一个新的 SmtpClient 。

于 2010-02-09T02:49:50.463 回答
1

你得到什么错误是 SmtpFailedrecipientException?如果是这样,您可以检查内部异常列表并查看 StatusCode 以获取更多信息。下面的链接有一些很好的信息

MSDN

编辑新信息

这是从我所看到的情况中找到您的 SMTP 服务器的问题,尽管您说它只发生在某些电子邮件上。您是否使用了多个 smtp 服务器,如果是这样,也许您可​​以将问题特别归结为一个,如果不是,则可能是您发送的电子邮件的速度/数量导致您的 smtp 服务器出现问题。

于 2010-02-05T19:07:52.763 回答
1

看到您发送电子邮件的循环以及您提供的错误只有解决方案。将邮件对象声明在循环之外,并在用于发送邮件的循环之外进行
分配。fromaddressfromaddress字段在循环中一次又一次地分配,这是您的问题。

于 2012-06-08T15:15:52.170 回答
1

对我们来说,一切都很好,电子邮件非常小,并且发送的邮件并不多,并且突然出现了这个错误。似乎是技术人员安装了 ASTARO,它阻止了电子邮件的发送。我们收到了这个错误,所以是的,这个错误有点神秘,但我希望这可以帮助其他人。

于 2012-05-25T12:27:33.057 回答
1

五年后(我希望这个开发人员还没有等待修复这个..)

我遇到了同样的问题,由同样的错误引起:我声明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();
于 2015-10-06T14:59:32.667 回答
0

当 Web 服务器无法访问邮件服务器时,可能会出现此错误。确保 Web 服务器可以访问邮件服务器,例如 ping 它。

于 2014-02-18T13:49:36.213 回答