【发布时间】:2015-01-06 11:30:51
【问题描述】:
在尝试从 C# 发送电子邮件时,我收到“发送邮件失败”。内部异常是“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应[ip地址]。”
这是我目前拥有的代码,尽管我尝试了很多变体都无济于事:
string To = "[my email]";
string From = "[my email]";
string Subject = "Test Email";
string Body = "Test email.";
MailMessage completeMessage = new MailMessage(From, To, Subject, Body);
SmtpClient client = new SmtpClient("smtp.microsoft.com", 25);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = true;
client.Credentials = new NetworkCredential("[my login]", "[my password]");
client.EnableSsl = true;
client.Send(completeMessage);
我在没有端口号、没有登录凭据和没有交付方法的情况下尝试过这个(主要基于我看到的类似问题的正确答案的其他版本),但我总是得到同样的例外。
更新:
根据 Ruskin 的建议,我使用自己的 gmail 帐户(基本上是我发给我的测试电子邮件)尝试了此操作。这是我在代码中得到的:
string To = "[my email]@gmail.com";
string From = "[my email]@gmail.com";
string Subject = "Test Email";
string Body = "With stuff in it.";
MailMessage completeMessage = new MailMessage(From, To, Subject, Body);
SmtpClient client = new SmtpClient("smtp.gmail.com", 25);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = true;
client.Credentials = new NetworkCredential("[login]", "[password]");
client.EnableSsl = false;
我收到的新消息是“SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应是:5.7.0 必须先发出 STARTTLS 命令。i3sm38798124pdf.39 - gsmtp”。
更改此行后,我能够成功发送和接收电子邮件:
client.EnableSsl = true;
但是,切换回原始帐户凭据会导致与之前相同的错误。
【问题讨论】:
-
鉴于您使用的所有详细信息都已更改,因此很难在此处诊断此类问题,您是否使用简单的 GMail 帐户尝试过上述代码?
-
@Ruskin:谢谢你的想法。我已经相应地更新了问题。