SMTP 电子邮件客户端"Timeout"或"requires secure connection"抛出错误,即使使用正确的凭据



我是C#中SMTP客户端的新手。所以我决定用我的证书来测试它。我构建了一个ASP.NET Web表单应用程序,该应用程序有一个"联系我们"页面,我正试图在该页面上向填写表单的任何人发送电子邮件。

看完这篇文章后,我尝试了示例代码https://www.c-sharpcorner.com/UploadFile/87b416/sending-a-simple-email-using-smtpclient-in-C-Sharp/

我在雅虎有一个帐户,所以我使用了它的SMTP域"SMTP.mail.Yahoo.com",端口号为:465,然后我的应用程序总是抛出超时异常。所以我决定尝试谷歌的服务器"smtp.gmail.com"与"587"端口,现在它提出了不同的异常消息:

SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:5.5.1需要身份验证

我不明白在谷歌和雅虎这样的安全服务器上使用SMTP的先决条件是什么。请有人解释一下。

还要注意的是,我的谷歌账户没有启用两步验证,只是为了表明这一点,因为SO上的一些问题已经提到这可能是问题所在。

我也读过这个问题,但我直接在我的机器上测试——Gmail错误:SMTP服务器需要安全连接,或者客户端没有经过身份验证。服务器响应为:5.5.1需要身份验证

如果有帮助的话,下面是示例代码:

try
{
    MailMessage m = new MailMessage();
    m.From = new MailAddress("dummy123@gmail.com");
    m.To.Add(new MailAddress("dummyreceiver123@gmail.com"));
    m.Subject = TBSub.Text;
    m.Body = TBBody.Text;
    m.IsBodyHtml = true;
    NetworkCredential nc = new NetworkCredential();
    nc.UserName = "dummy123"
    nc.Password = "dummy@123";
    SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
    smtp.Credentials = nc;
    smtp.EnableSsl = true;
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtp.Send(m);
}
catch (Exception ex)
{
    //Log this error
}

我刚刚测试了你的代码,它运行良好,你只需要修改这一部分:

nc.UserName = "test"
nc.Password = "password";

这必须是一个有效的gmail或谷歌应用程序电子邮件以及smtp连接的密码才能正常工作。我建议你把你自己的测试目的,然后修改这有你的电子邮件也:

m.From = new MailAddress("yourEmail@gmail.com");
m.To.Add(new MailAddress("yourEmail@gmail.com"));

只是为了验证您的消息是从您的函数传递的。

相关内容