SmtpClient - 操作超时

use*_*291 4 c# smtp

我正在尝试使用 C# 创建一个小应用程序来发送电子邮件,但即使使用端口 587 (GMail) TLS 或 465 (GMail SSL) 我也无法让它工作。我不确定是什么导致了我的问题,我应该编辑我的 app.config 文件吗?这是我的代码:

try
{
  SmtpClient client = new SmtpClient("smtp.gmail.com", 465);
  client.EnableSsl = true;
  client.Timeout = 10000;
  client.DeliveryMethod = SmtpDeliveryMethod.Network;
  client.UseDefaultCredentials = false;
  client.Credentials = new NetworkCredential("myemailid", "mypwd");

  MailMessage msg = new MailMessage();
  msg.To.Add(txtTo.Text);
  msg.From = new MailAddress("myemailid");
  msg.Subject = txtSub.Text;
  msg.Body = txtMsg.Text;

  client.Send(msg);
  MessageBox.Show("sent");
}
catch (Exception ex) 
{
    MessageBox.Show(ex.Message);
}
Run Code Online (Sandbox Code Playgroud)

小智 6

端口 25 和 465 导致问题。将端口更改为 587 对我有用。

Dim myCredential As System.Net.NetworkCredential
myCredential = New System.Net.NetworkCredential("emailid", "pwd")
smtp.Host = "server"
smtp.Port = 587
smtp.EnableSsl = True
smtp.UseDefaultCredentials = False
smtp.Credentials = myCredential
smtp.Send(mm)
Run Code Online (Sandbox Code Playgroud)


jst*_*ast 3

如果您收到超时异常,则意味着 SmtpClient 无法连接到 SMTP 服务器或在发送过程中的某个时刻丢失了连接。

这可能是由于您一端的防火墙阻止了与服务器的传出连接或阻止了端口 465 上的传出连接所致。

  • 我花了一天半的时间调试类似的问题,结果发现是 Symantec Endpoint Protection 阻止了出站邮件。奇怪的是,我的单元测试有效,但是当作为 Windows 服务运行时,我会收到此错误。 (3认同)