smtpclient“发送邮件失败”

时间:2010-02-05 19:03:13

标签: c# .net 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_connectionclosed。   在   System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(字节[]   缓冲区,Int32偏移量,Int32读取,   布尔值readLine)at   System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader   caller,Boolean oneLine)at   System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader   来电者)   System.Net.Mail.CheckCommand.Send(SmtpConnection   conn,String&amp;回应)   System.Net.Mail.MailCommand.Send(SmtpConnection   conn,Byte [] command,String from)at   System.Net.Mail.SmtpTransport.SendMail(MailAddress   sender,MailAddressCollection   收件人,String deliveryNotify,   SmtpFailedRecipientException&安培;   例外)

8 个答案:

答案 0 :(得分:9)

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

  1. “发件人”地址的限制。如果您使用的是不同的地址,则SMTP服务可能会阻止某些地址发送。
  2. SMTP服务上的防洪可能会阻止电子邮件外出。
  3. 无论是其中一个还是其他错误,您都需要查看异常和内部异常以获得更多细节。

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

MSDN

编辑新信息

这是从我能看到的内容中找到您的SMTP服务器的问题,尽管您说它只发生在某些电子邮件上。您使用的是多个smtp服务器吗?如果是这样,您可以将问题简化为一个,如果不是,可能是您发送的电子邮件的速度/数量导致您的smtp服务器出现问题。

答案 4 :(得分:1)

对于我们来说,一切都很好,电子邮件非常小,而且很多都没有被发送,并且很热情地发出了这个错误。似乎技术人员安装了ASTARO,阻止了电子邮件的发送。我们得到了这个错误所以是的错误有点神秘,但我希望这可以帮助别人。

答案 5 :(得分:1)

看到您发送电子邮件的循环以及您提供的错误只有解决方案 将邮件对象声明为循环,并将fromaddress分配给您用于发送邮件的循环。 fromaddress字段会在您的问题循环中反复分配。

答案 6 :(得分: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();

答案 7 :(得分:0)

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