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次,而其余时间则少了一些时间。 我检查了所有那些错误,电子邮件有有效的电子邮件地址。 不知道是什么问题。 我真的需要帮助。

编辑:这是我的exception跟踪

错误 – 发送邮件失败。 Inner Ex – System.IO.IOException:无法从传输连接中读取数据:net_io_connectionclosed。 System.Net.Mail.Smt.Mail.Smt.Mail.Smt.Mail.Smt.Mail.Smt.RaillyReaderFactory处的System.Net.Mail.Smt.Mail.Mail.Smt.Mail.Smt.Mail.Smt.Mail.Smt.Mail.Smt.Mail.SMt上的System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte [] buffer,Int32 offset,Int32 read,Boolean readLine) System.Net上System.Net.Mail.MailCommand.Send(SmtpConnection conn,Byte []命令,String from)的System.Net.Mail.CheckCommand.Send(SmtpConnection conn,String&response)中的.ReadLine(SmtpReplyReader调用者)。 Mail.SmtpTransport.SendMail(MailAddress sender,MailAddressCollection recipients,String deliveryNotify,SmtpFailedRecipientException&exception)

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

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

无论是其中一个还是其他错误,您都需要查看exception和内部exception以获得更多细节。

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

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

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

MSDN

编辑新信息

从我能看到的内容中找到您的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'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(); 

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