【问题标题】:.NET 3.5 Smtpclient - failure sending email - works only after restarting everytime.NET 3.5 Smtpclient - 发送电子邮件失败 - 仅在每次重新启动后才有效
【发布时间】:2012-12-03 18:17:13
【问题描述】:

在带有 .NET 3.5 的 Windows 控制台应用程序中(我将现有的 .NET 2.0 应用程序更改为 .NET 3.5)

我有一个奇怪的问题,发送电子邮件的代码工作几次(可能是 5 到 10 次)。

几次后,发送邮件失败,提示“发送邮件失败”。重新启动系统后,相同的代码可以工作。 (这不是生产中的预期解决方案)。

这是一段代码,我觉得,在某个地方我已经关闭了这个 SmtpClient 连接。所以我将客户端设置为 null 并调用了 GC.Collect,但没有帮助我。

请帮忙



private static void SendEmail(MailMessage msg)
{
            SmtpClient client = new SmtpClient(GetSMTPServer(), GetSMTPPort());

            client.Credentials = CredentialCache.DefaultNetworkCredentials;
            client.EnableSsl = false;
            client.ServicePoint.MaxIdleTime = 1;
            //client.Timeout = GetSMTPTimeout(); 30000000
            client.Send(msg);
            client = null;
            GC.Collect();
}


【问题讨论】:

  • 异常详情不够,抓拍异常详情。
  • - smEx {“发送邮件失败。”} System.Net.Mail.SmtpException - InnerException {“无法从传输连接读取数据:net_io_connectionclosed。”} System.Exception {System.IO. IOException}
  • 我看过这个帖子,除了升级到 4.0 和安装服务包之外没有答案。不能推荐:(
  • 释放连接使用的资源的正确方法是使用client.Finalize(true),而不是使用client = null

标签: .net smtpclient


【解决方案1】:

尝试简单地使用using 块在发送后正确处理SmtpClient

private static void SendEmail(MailMessage msg)
{
    using(SmtpClient client = new SmtpClient(GetSMTPServer(), GetSMTPPort()))
    {
        client.Credentials = CredentialCache.DefaultNetworkCredentials;
        client.EnableSsl = false;
        client.Send(msg);
    }
}

另请参阅:.NET Best Method to Send Email (System.Net.Mail has issues)

【讨论】:

    【解决方案2】:

    如果两封邮件的发送间隔大于60秒小于90秒,肯定会报这个错误。

    例如,您在上午 8:08:08 发送第一封电子邮件,然后在上午 8:09:10 发送第二封电子邮件,将抛出异常。

    这是SmtpClient.TimeOut设置的错误,您无法更改。

    如何解决这个问题? 三种方式:

    1. 尝试捕捉发送,如果捕捉到异常,再次发送。
    2. SmtpClient.Dispose() 适用于 .net framework 3.0 及更高版本
    3. set SmtpClient.servicepoint.maxidletime=1000; 设置为 1 太小,不能在调试模式下工作

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多