【问题标题】:Sending email using SMTP in C# ocasionally times out在 C# 中使用 SMTP 发送电子邮件偶尔会超时
【发布时间】:2015-08-10 09:19:13
【问题描述】:

我正在使用以下代码通过 Windows 域中的 MS Exchange 服务器发送电子邮件:

SmtpClient client = new SmtpClient();
client.Port = 25;
client.Host = "mail.mydomain.com";
client.EnableSsl = false;
client.Timeout = 60000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Credentials = new System.Net.NetworkCredential("sender@mydomain.om", "password");
client.UseDefaultCredentials = false;

MailMessage mm = new MailMessage("sender@mydomain.com", "receiver@anotherdomain.com", "test", "test");
mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

try
{
      client.Send(mm);
      MessageBox.Show("Success");
}
catch (Exception ex)
{
      MessageBox.Show("Faild: "+ex.Message);
}

在大多数情况下,这可以正常工作并且发送电子邮件没有问题,但是在每 2 或 3 次成功发送后,它会失败 1 或 2 次并出现超时错误(它在大约 10 秒后超时,远小于指定的 60 秒用于我的代码中的客户端超时)。
我的邮件服务器是 MS Exchange,并且位于通过 LAN 连接到客户端计算机的同一域中,所以我认为没有网络问题,它应该是由客户端或服务器中的配置不匹配引起的。
有什么想法吗?

【问题讨论】:

  • 为什么使用端口号25?
  • @suji:这个配置是服务器管理员给我的,你觉得连接25端口有问题吗?
  • 我不这么认为。我只是要求澄清。在使用 SmtpClient 时,它对我来说很安静
  • 当您不需要时,只需断开与 SMTP 客户端的连接,并在需要时重新连接。正如 suji 所说,有一个超时值,所以你不妨考虑这一点并尽可能多地节省内存。

标签: c# email smtp timeout exchange-server


【解决方案1】:

SmtpClient 类没有 Finalize 方法,因此应用程序必须调用 Dispose 以显式释放资源。如果没有帮助,可以查看exchange server的连接限制设置。

【讨论】:

  • 连接限制到底是什么意思?
  • 也许,您可以先尝试处置客户端。
【解决方案2】:

SmtpClient.TimeOut 的默认值为100 seconds(10000MS)。但它也可以通过程序设置,因为它是具有set 和get 的属性。

public int Timeout { get; set; }

它获取或设置一个值,该值指定同步发送调用超时之后的时间量。因此,您可以通过increasing 尝试超时值,因为您的方法在某些情况下会失败(抛出异常)。 Reference

【讨论】:

  • 我告诉它在比我当前设置的超时更短的时间后失败,所以它不是一个解决方案
猜你喜欢
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多