SmtpException:发送邮件失败。使用附件循环发送

时间:2016-04-15 19:46:23

标签: c# loops smtpclient

我有一个控制台应用程序,可以向几个(当前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);
    }
}

1 个答案:

答案 0 :(得分:1)

当您一个接一个地发送消息时,很可能您正在使用smtp服务器反垃圾邮件过滤器。尝试将它们分开并在每次发送时进行3次尝试。显然你不应该停止,如果任何一个发送失败,你应该通过所有12。