这是我的代码
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&安培; 例外)
答案 0 :(得分:9)
好吧,“发送电子邮件失败”应该有更多的细节。但是有一些事情可能导致这种情况。
无论是其中一个还是其他错误,您都需要查看异常和内部异常以获得更多细节。
答案 1 :(得分:3)
发送大量电子邮件时遇到了同样的问题。将deliveryMethod
属性设置为PickupDirectoryFromIis
会为我修复它。
也不要每次都创建一个新的SmtpClient。
答案 2 :(得分:3)
显然这个问题只是通过增加我的第三方smtp服务器上的队列大小来解决。 但Nip的回答听起来也很有用
答案 3 :(得分:1)
你得到的是什么错误是一个SmtpFailedrecipientException?如果是这样,您可以检查innerexceptions列表并查看StatusCode以获取更多信息。以下链接有一些很好的信息
编辑新信息
这是从我能看到的内容中找到您的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它。