我有一个控制台应用程序,可以向几个(当前12个)不同的电子邮件组发送电子邮件。该过程循环执行,每次创建不同的Excel工作簿,保存工作簿,然后发送附有此工作簿的电子邮件。
这个过程持续了好几个月。现在,该程序将通过2封电子邮件,然后它会抛出Failure sending mail.
的例外我发现内部异常是Unable to read data from the transport connection: net_io_connectionclosed
工作簿是通过2个SQL存储过程创建的。即使电子邮件失败,工作簿也会被创建并且可以打开,因此我认为它与所涉及的SQL无关。
我已经看到了类似问题的其他几个SO问题,但由于我的流程适用于2,失败1,适用于2,失败1 ...我相信我的问题不同于简单的端口或凭据问题
这是我在循环之前声明SmtpClient
的代码SmtpClient client = new SmtpClient("intmail.MyDomain.net", 25);
NetworkCredential cred = new NetworkCredential("myEmailAddress@email.com", "");
client.Credentials = cred; // Send our account login details to the client.
client.EnableSsl = false; // Read below.
这是我在循环中创建电子邮件,附加工作簿和发送的代码。
MailMessage msg = new MailMessage();
Attachment xls01 = new Attachment(filePath);
string emailTo = ClientEmail;
string[] emailTos = emailTo.Split(new char[] { ';' });
foreach (string To in emailTos)
{
msg.To.Add(To);
Console.WriteLine(To);
}
msg.From = new MailAddress("myEmailAddress@email.com");
//msg.CC.Add(new MailAddress("myEmailAddress@email.com"));
msg.Subject = ClientName + reportMonth + " " + reportYear;
msg.Body = "Attached is report for period ending on the last day of " + reportMonth + " " + reportYear + ".\r\nAlso attached are the 13 month trends.";
msg.Attachments.Add(xls01);
try
{
client.Send(msg);
}
catch (Exception ex)
{
Console.WriteLine(ex); //Should print stacktrace + details of inner exception
if (ex.InnerException != null)
{
Console.WriteLine("InnerException is: {0}", ex.InnerException);
}
}
答案 0 :(得分:1)
当您一个接一个地发送消息时,很可能您正在使用smtp服务器反垃圾邮件过滤器。尝试将它们分开并在每次发送时进行3次尝试。显然你不应该停止,如果任何一个发送失败,你应该通过所有12。