首页 文章

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

提问于
浏览
186

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

var fromAddress = new MailAddress("mymailid@gmail.com");
        var fromPassword = "xxxxxx";
        var toAddress = new MailAddress("yourmailid@yourdoamain.com");

        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帐户mymailid@gmail.com . 此人正在使用电子邮件,客户端或移动设备等应用程序 . 如果这是劫机者试图访问您的帐户,我们会阻止登录尝试 . 请查看登录尝试的详细信息:2014年1月3日星期五13:56:08 UTC时间地址:xxx.xx.xx.xxx(abcd.net . )地点:宾夕法尼亚州费城费城宾夕法尼亚州,美国如果您无法识别此登录尝试,则其他人可能会尝试访问您的帐户 . 您应该立即登录您的帐户并重置密码 . 重置密码如果是您并且您在访问帐户时遇到问题,请完成http://support.google.com/mail?p=client_login中列出的问题排查步骤 . 您诚挚的,Google帐户小组

23 回答

  • 6

    我使用了上面提到的所有解决方案,但只有在我从Gmail设置启用IMAP Access后才能使用它Link to Enable IMAP Access in gmail settings

    当然,其他解决方案中的要点也是必需的 .

  • 0

    尝试更改主机,这是新主机,我得到了这个配置mozilla thunderbird

    Host = "smtp.googlemail.com"
    

    这对我有用

  • 224

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

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

    或者2)登录gmail到您的本地计算机,按照Link并选择review this activity并采取适当的措施 .

  • 17

    When you try to send mail from code and you find the error "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required", than the error might occur due to following cases.

    case 1: 当密码错误时

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

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

    There is a solution for each

    solution for case 1: 输入正确的密码 .

    solution 1 for case 2 :转到以下链接https://www.google.com/settings/security/lesssecureapps的安全设置,启用安全性较低的应用 . 这样您就可以从所有应用程序登录 .

    solution 2 for case 2 :(参见https://stackoverflow.com/a/9572958/52277)启用双因素身份验证(也称为两步验证),然后生成应用程序专用密码 . 使用新生成的密码通过SMTP进行身份验证 .

    solution 1 for case 3: (这可能会有所帮助)您需要查看活动 . 但由于最新的安全标准,链接无效,因此审查活动将无济于事 . 所以试试下面的情况 .

    solution 2 for case 3 :如果您已将代码托管在 生产环境 服务器上的某个位置,并且您可以访问 生产环境 服务器,则可以将远程桌面连接连接到 生产环境 服务器,并尝试从 生产环境 服务器的浏览器登录一次 . 这将为登录google添加excpetioon,您将被允许从代码登录 .

    But what if you don't have access to the production server. 尝试解决方案3

    solution 3 for case 3: 您必须为您的Google帐户启用其他时区/ IP登录 .

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

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

  • 6

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

    登录到您的电子邮箱后,CLICK HERE

    这将带您进入以下页面

    Less Secure Apps Page

  • 2

    今天花了几个小时尝试每个解决方案,我仍然无法通过这个确切的错误 . 我用这种方式多次使用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
            }
    

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

  • 0

    嗨我有同样的问题,

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

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

  • 0

    只需按照谷歌中的步骤电子邮件并启用不太安全的应用

  • 8

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

  • 2

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

    • 关闭双因素身份验证

    • 将"Allow less secure apps"设置为ON

    • 从 生产环境 服务器登录您的Gmail帐户

    • Go here以及批准登录活动

    • 在 生产环境 服务器中运行您的应用

    工作代码

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

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

    将"Allow less secure apps"设置为ON(同一页面,需要滚动到底部)
    Allow less secure apps

  • 87

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

    MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");             
                mail.From = new MailAddress("fromaddress@gmail.com");
                mail.To.Add("toaddress1@gmail.com");
                mail.To.Add("toaddress2@gmail.com");
                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);
    

    你可以参考my blog

  • 0

    对于部署到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("my_user_name@gmail.com", "my_password");
    

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

    client.TargetName = "STARTTLS/smtp.gmail.com";
    
  • -1

    对我有用的是为不太安全的应用程序激活选项(我使用的是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("from@gmail.com")
            mail.[To].Add("to@gmail.com")
            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

  • 0

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

    enter image description here

  • 1

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

  • 4

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

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

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

  • 0

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

    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)...
    
  • -5

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

    • 登录您的admin.google.com

    • 点击SECURITY < - 如果这不是't visible, then click ' MORE CONTROLS',并从列表中添加它

    • 单击“基本设置”

    • 滚动到“基本设置”框的底部,单击链接:'Go to settings for less secure apps'

    • 选择选项#3:为所有用户强制访问不太安全的应用程序(不推荐)

    • 按窗口底部的“保存”

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

  • 10

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

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

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

    Screen shot

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

  • 1

    如果你正在使用Gmail .

    • 1登录到您的帐户

    2-浏览link

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

    请享用....

  • 2

    你应该 disallow less secure apps to access your google account .

    去做:

    https://myaccount.google.com/lesssecureapps

  • 153

    NOVEMBER 2018, 已尝试过上述所有内容但没有成功 .

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

    var fromAddress = new MailAddress(asd@asd.com, "From Name");
    var toAddress = new MailAddress("tosend@asd.com", "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);
    }
    
  • 0

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

    :)

    当它等待一个断点时,当我删除断点时它会产生这个错误

相关问题