关于c#:Gmail错误:SMTP服务器需要安全连接,或者客户端未经过身份验证。

Gmail Error :The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required

我使用以下代码发送电子邮件。代码在我的本地机器上工作正常。但在生产服务器上,我收到了错误消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        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账户上,我在运行了生产服务器上的代码后收到了以下电子邮件

Hi ,

Someone recently used your password to try to sign in to your Google
Account [email protected]. This person was using an application such
as an email, client or mobile device.

We prevented the sign-in attempt in case this was a hijacker trying to
access your account. Please review the details of the sign-in attempt:

Friday, 3 January 2014 13:56:08 o'clock UTC IP Address: xxx.xx.xx.xxx
(abcd.net.) Location: Philadelphia PA, Philadelphia, PA, USA

If you do not recognise this sign-in attempt, someone else might be
trying to access your account. You should sign in to your account and
reset your password immediately.

Reset password

If this was you and you are having trouble accessing your account,
complete the troubleshooting steps listed at
http://support.google.com/mail?p=client_login

Yours sincerely, The Google Accounts team


当你试着和你的电子邮件从发送队列find the error……在"SMTP服务器安全连接或authenticated was not the客户端。服务器响应是茶"认证要求:5.5.1,可能比两个案例的occur跟随误差。P></

1:房屋is when the wrong密码P></

房屋2:当你试图登录从一些应用程序P></

房屋3:当你试图登录你的时间比从其他区域/计算机/域(this is the most of场景房屋时从队列发送电子邮件)P></

there is a solution for eachP></

解决方案:Enter the for房屋1正确的密码。P></

解决方案:1房屋2 Go to for at the security settings followig HTTPS链接:/ / / / / lesssecureapps www.google.com security settings and less secure允许应用程序。我知道你会可以从应用程序的登录到。P></

解决方案:在房屋2 2(EEA stackoverflow.com HTTPS:/ / / / / 52277 9572958双因子认证(enable)又名两步验证),然后生成的密码安应用特异性。使用新的密码authenticate generated,SMTP等。P></

解决方案:1的房屋3(this for You might be the need to评论帮助)的活性。reviewing but the will not be to活动帮助两个新标准将not be the security的有用链接。我尝试below the房屋。P></

解决方案:在房屋2 3如果你有你的代码的代码的地方在线如果你有生产服务器和接入服务器比take to the生产,远程桌面连接to the生产服务器和浏览器试图登录盎司from the of the生产服务器。this will add to excpetioon for登录谷歌允许你will be from to登录队列。P></

但如果你不有一个access to the生产服务器。解决方案3:尝试P></

解决方案3:You have to for房屋3允许从其他时区的登录你的谷歌账户/ IP)。P></

to this the链接给后续g.co HTTPS:/ / allowaccess接入模式和连续clicking allow the button。P></

德布尔说。在这里你去。你现在可以登录will be from any to any of the means of APP模式的计算机和你的谷歌帐户。P></


这发生在当你尝试登录generally从不同的IP地址或计算机的时区。你的电子邮件ID和服务器的生产都是在你have used different时区。解决方案:选择这些光子或者ofP></

1)在服务器日志通过远程接入到生产,和手势与你credentials盎司到Gmail。they will ask for the confirm确认和超时,它的日志。P></

(2)在本地计算机登录Gmail,你选择这个链接和评论,后续行动和采取适当的本构。P></


它在安全模式的问题,prevents Gmail默认的电子邮件帐户访问for applications from module。You can up to accept the集恩从登录你的应用。P></

登录后,在你的电子邮件,点击这里P></

这将带你到下面的主页P></

Less Secure Apps PageP></


在今天花了几个小时尝试这里的每一个解决方案后,我仍然无法克服这个确切的错误。我已经用Gmail很多次了,所以我知道它很蠢,但是我没有做任何事情来解决这个问题。我最终在我的案例中偶然发现了解决方案,所以我想我会分享。

首先,上面的大多数答案也是必需的,但在我的例子中,这只是创建smtpclient类时对代码排序的一个简单问题。

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

1
2
3
4
5
6
7
8
9
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
        }

但是,如果您将凭证设置器调用移到底部,电子邮件将毫无错误地发送。我没有对周围的代码做任何更改…例如用户名/密码等。很明显,无论是启用SSL、使用默认凭据,还是交付方法都依赖于首先设置的凭据…我没有测试所有内容来确定它是哪个凭据。

1
2
3
4
5
6
7
8
9
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
        }

希望这有助于将来减轻别人的头痛。


谁有相同的问题,P></

我做什么或解决它。is on the less secure把应用程序。在我的Gmail帐户联机。i entered this链接:HTTPS:/ / / / lesssecureapps www.google.com security settingsP></

我的应用程序和安全上的转弯,和挤压它。has been above恩也说P></


一步的后续电子邮件和谷歌在the less secure enable the Apps。P></


我有一个以前工作的代码现在抛出这个错误。密码没有问题。也不需要将消息转换为base64。结果,我需要做以下工作:

  • 关闭2因素身份验证
  • 将"允许不太安全的应用程序"设置为"打开"
  • 从生产服务器登录您的gmail帐户
  • 也到这里来批准登录活动
  • 在生产服务器中运行应用程序
  • 工作代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        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);
        }

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

    将"允许不太安全的应用程序"设置为"打开"(同一页,需要滚动到底部)氧化镁


    我面临的问题一样。它发生在当你把2步验证(MFA)。只是把问题关2步验证和你solved should be。P></


    您需要从这里打开"允许不太安全的应用程序"https://myaccount.google.com/lessecureapps


    以下是我的代码也有误差。但问题是the same the wrong我给我的密码。..try队列将工作perfectly below the enP></

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
                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);

    你可以参考它在我的博客P></


    只需打开或Gmail的设置。见下图:

    氧化镁


    对我来说有效的是激活不太安全的应用程序的选项(我使用的是vb.net)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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/lessecureapps


    Tomasz Madeyski的一句话解决了我的问题…他说,setdefaultcredential上存在一个bug,他说:

    "问题是,在useDefaultCredentials setter中存在以下代码:this.transport.credentials=value?"(icredentialsbyhost)credentialcache.defaultnetworkcredentials:(icredentialsbyhost)空;它覆盖由凭据设置器设置的凭据。对我来说,它看起来像smtpclient的bug"

    如果在设置凭证后放入smtpClient.UseDefaultCredentials = false…此行设置为空那些凭据…


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

    SmtpException: The SMTP server requires a secure connection or the
    client was not authenticated. The server response was: 5.5.1
    Authentication Required.

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

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

    1
    2
    3
    4
    5
    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客户端上设置了以下属性后,它才开始工作:

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


    2018年11月,尝试了上述所有方法,但没有成功。

    下面是最终有效的解决方案。不幸的是,它没有使用SSL,但它起作用了!!!!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    var fromAddress = new MailAddress(asd@asd.com,"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);
    }


    我尝试了所有在这里找到的建议,从启用不太安全的应用程序,到尝试端口587…什么都没用。最后,我只评论了行UseDefaultCredentials = false。如果我不碰那个布尔值,一切都正常。


    我有很多的想法看起来真的在学院,是唯一的解决方案就是这样(工作与电子邮件不同的提供商):P></

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
                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)...

    我是一个商业用户的谷歌应用程序,我花了几个小时来处理这个问题,即使在拥有了所有正确的设置(SMTP、端口、EnableSSL等)之后。以下是我和那些在发送电子邮件时抛出5.5.1错误的网站的工作原理:

  • 登录你的admin.google.com
  • 单击安全<--如果不可见,则单击"更多控件",然后从列表中添加它。
  • 单击"基本设置"
  • 滚动到"基本设置"框的底部,单击链接:"转到安全性较低的应用程序的设置"
  • 选择选项3:强制所有用户访问不太安全的应用程序(不推荐)
  • 按窗口底部的"保存"
  • 做了这些之后,我从网站上发来的电子邮件又开始工作了。祝你好运!


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

    这就是为我做的。我仍然使用相同的电子邮件帐户,但必须生成一个新的应用程序特定的密码。

    https://support.google.com/accounts/answer/185833?HL=EN

    Screen shot

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


    如果你用的是Gmail。

    • 1-登录您的帐户

      2-浏览此链接

      3-允许不太安全的应用程序:打开

    享受……


    你应该禁止不太安全的应用程序访问你的谷歌帐户。

    要做:

    https://myaccount.google.com/lessecureapps


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

    :)

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


    我使用了上面提到的所有解决方案,但最终只有在我从gmail设置链接启用imap访问以在gmail设置中启用imap访问后,它才起作用。

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


    尝试this is the changing the host,新一,我有这个配置Mozilla雷鸟P></

    1
    Host ="smtp.googlemail.com"

    我为我的工作P></