C# SMTP电子邮件客户端抛出错误“超时”或“需要安全连接”,即使凭据正确

C# SMTP电子邮件客户端抛出错误“超时”或“需要安全连接”,即使凭据正确,c#,email,smtp,smtpclient,C#,Email,Smtp,Smtpclient,我是C语言中SMTP客户端的新手,所以我决定用我的凭据测试它。我构建了一个ASP.NET Web表单应用程序,它有一个“联系我们”页面,我试图在该页面上向填写表单的人发送电子邮件 在阅读本文之后,我尝试了示例代码- 我在雅虎有一个帐户,所以我使用了它的SMTP域SMTP.mail.Yahoo.com,端口号:465,然后我的应用程序总是抛出超时异常。因此,我决定尝试使用带有587端口的谷歌服务器smtp.gmail.com,现在它引发了不同的异常消息: SMTP服务器需要安全连接,或者客户端未通

我是C语言中SMTP客户端的新手,所以我决定用我的凭据测试它。我构建了一个ASP.NET Web表单应用程序,它有一个“联系我们”页面,我试图在该页面上向填写表单的人发送电子邮件

在阅读本文之后,我尝试了示例代码-

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

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

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

还要注意的是,我没有为我的Google帐户启用两步验证,只是为了澄清一下,因为SO上的一些问题提到这可能就是问题所在

我也读过这个问题,但我直接在我的机器上测试-

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

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或google应用程序电子邮件以及smtp连接正常工作的密码。我建议您为测试目的输入自己的电子邮件,然后将其修改为包含您的电子邮件:

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

这样您就可以验证您的邮件是否正在从您的函数传递。

您是否尝试添加smtp.UseDefaultCredentials=false;当您分配凭证对象时?感谢@NinjaMid76的评论。我添加了那个声明,但它给出了“SMTP身份验证错误”例外我确实放了我自己的id和密码,并在这里使用了一个虚拟的,只是为了审查,不,它不起作用。我也犯了同样的错误。如我的问题所示,它会询问“需要身份验证”。您是否尝试登录到谷歌网站上的帐户以确保您的帐户仍然有效?可能是锁上了,或者你的密码过期了?是的,是的。它没有被锁定,密码仍然有效。我发现了另一个问题,这个问题有一个解决方案,这里是我阅读的答案,从该链接。我对生产服务器一无所知,你能帮我一下吗?另一件事是这个代码在我的大学实验室工作。很抱歉我这么晚才回复。