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

vcs*_*vcs 241 .net c# gmail smtp

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

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);
Run Code Online (Sandbox Code Playgroud)

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

嗨,

最近有人使用您的密码尝试登录您的Google帐户mymailid@gmail.com.此人正在使用电子邮件,客户端或移动设备等应用程序.

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

星期五,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帐户团队

Ros*_*mar 277

当您尝试从代码发送邮件时,您发现错误"SMTP服务器需要安全连接或客户端未经过身份验证.服务器响应是:5.5.1需要身份验证",而不是由于以下情况可能发生的错误.

案例1:密码错误时

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

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

每个都有一个解决方案

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

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

案例2的解决方案2 :(请参阅/sf/answers/670107091/)启用双因素身份验证(也称为两步验证),然后生成应用程序专用密码.使用新生成的密码通过SMTP进行身份验证.

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

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

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

案例3的解决方案3:您必须启用从其他时区/ IP登录您的Google帐户.

要执行此操作,请单击链接https://g.co/allowaccess,然后单击"继续"按钮以允许访问.

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

  • 解决方案2!你小美女! (9认同)
  • 在azure上托管的网站需要按照解决方案3进行案例3:最终链接,这有助于https://g.co/allowaccess (4认同)
  • lesssecureapps链接上面的帮助:) (2认同)
  • 案例 3 的解决方案 2 - 对我来说就像一个魅力。谢谢。 (2认同)

Ars*_*had 188

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

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

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

  • 这也有很大帮助:https://www.google.com/settings/security/lesssecureapps (65认同)
  • 一点评论:转到https://security.google.com/settings/security/activity,在这里您会看到代码中的阻止连接.允许他们在这种情况下应该有所帮助. (20认同)
  • 此外,请确保禁用Google"Captcha" - 如果您在远程服务器上运行脚本(在本地计算机上运行时不需要),则可能需要这样做:https://accounts.google.com/DisplayUnlockCaptcha (7认同)
  • @乔治:非常感谢您的帮助。 (2认同)

Say*_*yka 102

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

登录到您的电子邮箱后,单击此处

这将带您进入以下页面

不太安全的应用页面

  • Sayka是今天的英雄!非常感谢. (2认同)
  • 这个答案很棒.它就像一个魅力.谢谢. (2认同)

use*_*627 24

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

但是,如果将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
}
Run Code Online (Sandbox Code Playgroud)

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

  • 问题是在`UseDefaultCredentials` setter中有这样的代码:`this.transport.Credentials = value?(ICredentialsByHost)CredentialCache.DefaultNetworkCredentials:(ICredentialsByHost)null;`覆盖由`Credentials` setter设置的`credentials`.对我来说,它看起来像'SmtpClient`的错误 (6认同)
  • 就我而言,我遇到了与您相同的问题,因此对代码重新排序,以使凭据最后对我有用。 (2认同)

Bar*_*eld 12

嗨我有同样的问题,

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

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


Raj*_*j K 12

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


小智 12

Gmail/Google 最近(从 2022 年 5 月起)删除了不太安全的应用程序访问权限。他们是这么说的:

\n
\n

为了确保您的帐户安全,从 2022 年 5 月 30 日起,Google 不再支持使用要求您仅使用用户名和密码登录 Google 帐户的第三方应用或设备。

\n
\n

现在,任何直接发送 SMTP 电子邮件的电子邮件发送器都会抛出错误“535-5.7.8 用户名和密码不被接受”。这是因为现在 Google 要求提供应用程序特定密码,而电子邮件帐户密码不是应用程序密码,因此它们显示用户名/密码不被接受。

\n

您需要创建并使用应用程序专用密码。应用程序密码的作用类似于您帐户的备用密码。它只能由您与之共享的应用程序使用,因此它比共享您的主密码更安全。

\n

要创建应用程序专用密码:

\n
    \n
  1. 启用两因素身份验证。
  2. \n
  3. 转到 Gmail 的帐户设置并选择应用程序密码。
  4. \n
  5. 将其命名为您想要的任何名称并创建密码。
  6. \n
  7. 使用这个新的 16 位密码以及用于 SMTP 的 gmail 电子邮件(在密码位置使用这个 16 位密码)
  8. \n
\n

享受发送电子邮件的乐趣..!!

\n

在此输入图像描述

\n

在此输入图像描述

\n

在此输入图像描述

\n


Jes*_*aya 9

我有一个以前工作的代码,现在抛出此错误.密码没问题.无需将消息转换为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("youremail@gmail.com", "secretpassword"),
            EnableSsl = true
        };

        client.Send("youremail@gmail.com", emailTo, subject, body);
    }
Run Code Online (Sandbox Code Playgroud)

关闭双因素身份验证 关闭双因素身份验证

将"允许安全性较低的应用"设置为"开"(同一页面,需要滚动到底部) 允许不太安全的应用


小智 8

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


小智 6

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


Sot*_*nis 6

正如其他人正确指出的那样,自 5 月 30 日起,谷歌不再支持使用第三方应用程序访问该帐户。

在此输入图像描述

为了能够从我的代码访问该帐户,我必须首先启用两步验证。 在此输入图像描述

完成此操作后,我创建了一个应用程序密码在此输入图像描述

然后,我用我用来访问我的帐户的密码替换了生成的密码。换句话说,我们需要使用这个新的应用程序密码删除 gmail 帐户密码(我们用来登录 gmail 的密码),然后该功能就会重新上线!

我希望这可以帮助别人:-)


Gan*_*i N 5

下面是我的代码。我也有同样的错误,但问题是我给我的密码错误。下面的代码将完美运行..试试看

            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);
Run Code Online (Sandbox Code Playgroud)

你可以参考我的博客

  • 我联系了我的托管服务提供商,他们说:**我们可以看到您配置了第三方 SMTP (smtp.gmail.com),这在我们的共享服务器环境中不支持。由于过度滥用邮件功能或垃圾邮件问题,不支持邮件功能。您可以使用非常流行且经常使用的 PHPMailer 发送电子邮件。** 但我的网站是在 mvc c# 中构建的,那么我该如何使用 phpmailer 呢? (2认同)

小智 5

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

在此处输入图片说明