smtp失败发送电子邮件。怎么解决?

时间:2016-06-20 08:33:19

标签: c# email smtp

MailMessage message = new MailMessage();

message.From = new MailAddress("MyMailAddress");
message.To.Add("DestinationMailAddress");
message.CC.Add("CCMailAddress");
message.Subject = "This is Subject";
message.SubjectEncoding = System.Text.Encoding.UTF8;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Body = "This is a test e-mail message sent by an application. ";


SmtpClient client = new SmtpClient();
client.Port = 587;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = true;
client.EnableSsl = true;
client.Host = "smtp.gmail.com";
client.Send(message);

这是我的代码。错误是

  

发送电子邮件失败。

内部例外:

  

{"无法连接到远程服务器"} {"连接尝试失败,因为连接方在一段时间后未正确响应,或已建立的连接失败,因为已连接的主机已连接未能回复74.125.68.109:587"}错误代码:10060

3 个答案:

答案 0 :(得分:4)

您的代码使用gmail作为您的SMTP:

client.Host = "smtp.gmail.com";

然而,您将SMTP登录凭据指定为您的Windows帐户:

client.UseDefaultCredentials = true;

如果gmail实际上是您的SMTP,则需要将其设置为false,然后提供您的Gmail登录凭据。

所以你的代码应该是这样的:

client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("yourusername", "yourpassword");

看起来您也可能遇到防火墙问题

  

{"无法连接到远程服务器"} {"连接尝试失败,因为连接方在一段时间后未正确响应,或已建立的连接失败,因为已连接的主机已连接未能回复74.125.68.109:587"}错误代码:10060

确保应用程序可以访问互联网,并且打开必要的端口以访问Gmail。还要确保在您的Gmail帐户上允许使用较少的安全应用程序,并且如果您使用双因素身份验证,则表明您已为该帐户创建了应用程序专用密码,并且正在使用该密码进行连接。

如何启用安全性较低的应用:https://support.google.com/accounts/answer/6010255?hl=en

您可能还需要更改MailAddress.To的填充方式:

message.To.Add(new MailAddress("DestinationMailAddress"));

答案 1 :(得分:0)

由于功能被包装,您应该使用内部异常消息来获取详细的错误消息。失败的原因就在那里!

public static void Main()
{
   try {
       SendMail();
  }
  catch(Exception e) {
     if (e.InnerException != null)
        Console.WriteLine("Inner exception: {0}", e.InnerException);
  }

}

答案 2 :(得分:0)

进行这些更改

client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("yourusername", "yourpassword");

这也是

http://docs.helpscout.net/article/120-smtp-settings

完整的工作代码

protected void SendMail()
        {
            MailMessage msg = new MailMessage();
            System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
            try
            {
                msg.Subject = "Add Subject";
                msg.Body = "Add Email Body Part";
                msg.From = new MailAddress("Valid Email Address");
                msg.To.Add("Valid Email Address");
                msg.IsBodyHtml = true;
                client.Host = "smtp.gmail.com";
                System.Net.NetworkCredential basicauthenticationinfo = new System.Net.NetworkCredential("Valid Email Address", "Password");
                client.Port = int.Parse("587");
                client.EnableSsl = true;
                client.UseDefaultCredentials = false;
                client.Credentials = basicauthenticationinfo;
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.Send(msg);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
            }
        }