it-swarm.cn

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

我正在使用以下代码发送电子邮件。代码在我的本地计算机中正常运行。但在生产服务器上我收到错误消息

        var fromAddress = new MailAddress("[email protected]");
        var fromPassword = "xxxxxx";
        var toAddress = new MailAddress("[email protected]");

        string subject = "subject";
        string body = "body";

        System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
        {
            Host = "smtp.gmail.com",
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(fromAddress.Address, fromPassword)

        };

        using (var message = new MailMessage(fromAddress, toAddress)
        {
            Subject = subject,
            Body = body
        })


        smtp.Send(message);

在我的Gmail A/c上,我从生产服务器运行代码后收到了以下电子邮件

嗨,

最近有人使用您的密码尝试登录您的Google帐户[email protected]。此人正在使用电子邮件,客户端或移动设备等应用程序。

如果这是一名试图访问您帐户的劫机者,我们会阻止登录尝试。请查看登录尝试的详细信息:

星期五,2014年1月3日13:56:08 UTC时间地址:xxx.xx.xx.xxx(abcd.net。)地点:Philadelphia PA,Philadelphia,PA,USA

如果您无法识别此登录尝试,则其他人可能会尝试访问您的帐户。您应该立即登录您的帐户并重置密码。

重设密码

如果是您并且您在访问帐户时遇到问题,请完成 http://support.google.com/mail?p=client_login中列出的问题排查步骤

您诚挚的,Google帐户团队

218
vcs

当您尝试从不同时区或IP地址计算机登录时,通常会发生这种情况。您的生产服务器和您使用的邮件ID位于不同的时区。选择以下两种解决方案之一:

1)通过远程访问登录生产服务器,并使用您的凭据登录gmail一次。他们会要求确认,确认并注销。

或者2)登录gmail到您的本地计算机,按照 链接 并选择 查看此活动 并采取适当的措施。

169
Arshad

当您尝试从代码发送邮件时,您发现错误“SMTP服务器需要安全连接或客户端未经过身份验证。服务器响应为:5.5.1需要身份验证”,可能由于以下错误而发生以下案例。

案例1: 当密码错误时

案例2: 当您尝试从某个应用程序登录时

案例3: 当您尝试从您的时区/域/计算机以外的域登录(在大多数情况下从代码发送邮件时都是这种情况)

每个都有一个解决方案

案例1的解决方案: 输入正确的密码。

案例2的解决方案1 ​​ :转到以下链接的安全设置https://www.google.com/settings/security/lesssecureapps并启用安全性较低的应用。这样您就可以从所有应用程序登录。

案例2的解决方案2 :(参见 https://stackoverflow.com/a/9572958/52277 )启用双因素身份验证(又称两步验证),然后生成应用程序 - 特定密码。使用新生成的密码通过SMTP进行身份验证。

案例3的解决方案1: (这可能会有所帮助)您需要查看活动。但由于最新的安全标准,链接无效,因此审核该活动将无济于事。所以尝试以下案例。

案例3的解决方案2 :如果您已将代码托管在生产服务器上的某个位置,并且您有权访问生产服务器,那么请将远程桌面连接连接到生产服务器并尝试从浏览器登录一次生产服务器。这将为登录google添加excpetioon,您将被允许从代码登录。

但如果您无权访问生产服务器,该怎么办。尝试解决方案3

案例3的解决方案3:你必须为你的谷歌帐户启用从其他时区/ IP登录。

要执行此操作,请按照链接https://g.co/allowaccess并通过单击“继续”按钮进行访问。

就是这样。干得好。现在,您可以从任何计算机和任何应用程序登录到您的Google帐户。

244
Roshan Parmar

这是一个安全问题,Gmail默认阻止您从自定义应用程序访问您的电子邮件帐户。您可以将其设置为接受应用程序的登录。

登录到您的电子邮箱后, 点击这里

这将带您进入以下页面

Less Secure Apps Page

95
Sayka

今天花了几个小时尝试每个解决方案,我仍然无法通过这个确切的错误。我用这种方式多次使用gmail所以我知道这是愚蠢的,但我没有做任何事情来解决这个问题。我终于在我的案子中偶然发现了解决方案,以为我会分享。

首先,上面的大多数答案都是必需的,但在我的情况下,在创建SmtpClient类时,只需简单地对代码进行排序。

在下面的第一个代码段中,请注意“Credentials = creds”行所在的位置。即使您已正确设置其他所有内容,此实现也会生成此问题中引用的错误。

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
        {
            Host = Emailer.Host,
            Port = Emailer.Port,
            Credentials = creds,
            EnableSsl = Emailer.RequireSSL,
            UseDefaultCredentials = false,
            DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
        }

但是,如果将Credentials setter调用移到底部,则会发送电子邮件而不会出错。我没有更改周围的代码...即...用户名/密码等。显然,EnableSSL,UseDefaultCredentials或DeliveryMethod依赖于首先设置的凭据....我没有测试所有人都想知道它是哪一个。

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
        {
            Host = Emailer.Host,
            Port = Emailer.Port,
            EnableSsl = Emailer.RequireSSL,
            UseDefaultCredentials = false,
            DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
            Credentials = creds
        }

希望这有助于在将来为其他人带来一些麻烦。

18
user1011627

嗨我有同样的问题,

我做了什么来解决它。是打开不太安全的应用程序。连接到我的Gmail帐户后。我输入了以下链接: https://www.google.com/settings/security/lesssecureapps

然后我打开安全的应用程序,并且它工作。上面也有人说过

12
Barak Rosenfeld

我有一个以前工作的代码,现在抛出此错误。密码没问题。无需将消息转换为base64。事实证明,我需要做以下事情:

  1. 关闭双因素身份验证
  2. 将“允许安全性较低的应用”设置为“开”
  3. 从生产服务器登录您的Gmail帐户
  4. 转到 这里 以及批准登录活动
  5. 在生产服务器中运行您的应用

工作代码

    public static void SendEmail(string emailTo, string subject, string body)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("[email protected]", "secretpassword"),
            EnableSsl = true
        };

        client.Send("[email protected]", emailTo, subject, body);
    }

关闭双因素身份验证 Turning off 2-factor authentication

将“允许安全性较低的应用”设置为“开”(同一页面,需要滚动到底部) Allow less secure apps

8
Jeson Martajaya

只需按照google电子邮件中的步骤操作,即可启用安全性较低的应用。

8
Trung

您需要在此处开启“允许安全性较低的应用” https://myaccount.google.com/lesssecureapps

6
Raj K

我遇到了同样的问题。当您打开2步验证(MFA)时会发生这种情况。只需关闭2步验证,您的问题就应该解决了。

6
Anik

下面是我的代码。我也有同样的错误,但问题是我给了我的密码错误。下面的代码将完美地工作..它

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");             
            mail.From = new MailAddress("[email protected]");
            mail.To.Add("[email protected]");
            mail.To.Add("[email protected]");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";
            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";
            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";
            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;
            SmtpServer.Send(mail);

你可以参考 我的博客

4
Ganesh Pillai N

只需打开或gmail的设置。见下图给出的图像:

enter image description here

3
Rajesh Paliwal

对我有用的是激活安全性较低的应用程序选项(我使用的是VB.NET)

Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
        Dim mail As New MailMessage()
        Dim SmtpServer As New SmtpClient("smtp.gmail.com")
        mail.From = New MailAddress("[email protected]")
        mail.[To].Add("[email protected]")
        mail.Subject = "subject"
        mail.Body = body
        Dim attachment As System.Net.Mail.Attachment
        attachment = New System.Net.Mail.Attachment(file_location)
        mail.Attachments.Add(attachment)
        SmtpServer.Port = 587
        SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
        SmtpServer.EnableSsl = True
        SmtpServer.Send(mail)
    End Sub

请登录到您的帐户,然后转至 google.com/settings/security/lesssecureapps

2
Edgar

对于部署到Microsoft Azure的应用程序,我遇到了同样的问题。

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

首先,我在下一页(以gmail用户身份登录)批准了所有未知设备(一些来自爱尔兰的IP地址): https://security.google.com/settings/u/1/security/secureaccount

我为客户端使用了以下设置:

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("[email protected]", "my_password"); 

它只在我在smtp-client上设置以下属性后才开始工作:

client.TargetName = "STARTTLS/smtp.gmail.com";
2
haiiaaa

我尝试了这里找到的所有建议,从启用不太安全的应用程序到尝试端口587 ......没有任何效果。最后我只是注释了UseDefaultCredentials = false行。如果我没有触摸那个布尔值,一切都有效。

1
Kris Coleman

2018年11月, 尝试过以上所有方面都没有成功。

以下是最终有效的解决方案。不幸的是,它没有使用SSL,但它的工作原理!

var fromAddress = new MailAddress([email protected], "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");

const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "aspmx.l.google.com",
    Port = 25,
    EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}
1
InGeek

来自Tomasz Madeyski的评论解决了我的问题......他说,SetDefaultCredential存在一个错误,他说:

“问题是在UseDefaultCredentials setter中有这样的代码:this.transport.Credentials = value?(ICredentialsByHost)CredentialCache.DefaultNetworkCredentials:(ICredentialsByHost)null;它覆盖由Credentials setter设置的凭据。对我来说它看起来像SmtpClient的bug”

如果您在设置凭据后放置smtpClient.UseDefaultCredentials = false ...此行设置为null这些凭据...

1
FabianSilva

您可能需要从gmail创建/生成特定的APP密码。然后,您的应用或脚本将使用此新密码而不是您的常规密码。您的常规密码仍然可以正常使用。

这就是为我做的事情。我仍然使用相同的电子邮件帐户,但必须生成新的应用专用密码。

https://support.google.com/accounts/answer/185833?hl=en

Screen shot

基本上你可以在这里做到: https://security.google.com/settings/security/apppasswords

0
samiup

您应该 禁止安全性较低的应用访问您的Google帐户

去做:

https://myaccount.google.com/lesssecureapps

0
MohammadSoori

我真的看了很多想法,唯一的解决方案就是这种方式(适用于不同的电子邮件提供商):

            try
        {
            ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
            string Host = dsProvider.Rows[y]["POP_hostOut"].ToString();
            int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString());  //587
            string[] email = von1.Split('@');
            string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
            string password = layer.getUserPassword(listSender.SelectedValue.ToString());
            SmtpClient client = new SmtpClient(Host, port);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            //A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
            //System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, Host);
            //System.Net.CredentialCache cache = new System.Net.CredentialCache();
            //cache.Add(Host, port, "NTLM", myCreds);
            ///cache.GetCredential(Host, port, "NTLM");   //NTLM
            client.Credentials = new System.Net.NetworkCredential(userName, password);
            client.Host = Host;
            client.Port = port;
            client.EnableSsl = true;
            client.Send(message);
            ViewProgressbar();
        }
        catch (SmtpException ex)...
0
Walter

如果你正在使用Gmail。

  • 1登录到您的帐户

    2-浏览此 链接

    3-允许安全性较低的应用:开启

请享用....

0
Muhammad Azeem

我是商业用户的谷歌应用程序,即使在拥有所有正确的设置(smtp,port,enableSSL等)后,我花了最后几个小时处理这个问题。这对我和尝试发送电子邮件时抛出5.5.1错误的网站有用:

  1. 登录您的admin.google.com
  2. 单击SECURITY < - 如果不可见,则单击“更多控件”,然后从列表中添加它
  3. 单击基本设置
  4. 滚动到“基本设置”框的底部,单击链接:“转到不太安全的应用程序的设置”
  5. 选择选项#3:为所有用户强制访问不太安全的应用程序(不推荐)
  6. 按窗口底部的SAVE

这样做后,我的网站上的电子邮件表格再次运行。祝好运!

0
RichieMN

在等待smtp.SendMailAsync(mail)之前不要设置断点;

:)

当它等待一个断点给我这个错误,当我删除断点时,它已经工作

0
dewelloper