我正在使用以下代码通过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连接到客户端计算机的同一域中,所以我认为没有网络问题&它应该由客户端或服务器中的配置不匹配引起 有什么想法吗?
答案 0 :(得分:0)
SmtpClient类没有Finalize方法,因此应用程序必须调用Dispose以显式释放资源。如果没有帮助,您可以在交换服务器上检查有关连接限制的设置。
答案 1 :(得分:0)
SmtpClient.TimeOut
的默认值为100 seconds(10000MS)
。但它也可以通过程序设置,因为它是set
和get
的属性。
public int Timeout { get; set; }
获取或设置一个值,该值指定同步发送调用超时之前的时间量。因此,您可以尝试increasing
超时值,因为您的方法在某些情况下失败(抛出异常)。
Reference