SMTP服务器需要安全连接或客户端未经过身份验证.服务器响应是:5.5.1身份验证是否必需?

Abh*_*iya 76 c# smtp

我想从我的应用程序发送一封电子邮件,我写了以下代码来发送邮件

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("mymailid");
    msg.To.Add("receipientid");
    msg.Subject = "test";
    msg.Body = "Test Content";
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.UseDefaultCredentials = true;

    client.Send(msg);
Run Code Online (Sandbox Code Playgroud)

我在localhost上运行它,所以我正在做什么错误发送它.

当我发送按钮时,它给出了一个错误

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

Web.config文件中的代码

 <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />   
    <add key="smtpServer" value="smtp.gmail.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="sender@gmail.com" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="sender@gmail.com" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="sender@gmail.com">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="sender@gmail.com"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个错误并发送邮件?

mjb*_*mjb 93

我也有同样的问题.

我找到了这个解决方案:

Google可能阻止某些不使用现代安全标准的应用或设备尝试登录.由于这些应用和设备更易于破解,因此阻止它们有助于确保您的帐户更安全.

一些不支持最新安全标准的应用程序示例包括:

  • iOS或更低版本的iPhone或iPad上的Mail应用程序
  • 8.1版本之前的Windows手机上的Mail应用程序
  • 某些桌面邮件客户端,如Microsoft Outlook和Mozilla Thunderbird

因此,您必须在Google帐户中启用Less Secure Sign-In.

登录Google帐户后,请转到:

https://www.google.com/settings/security/lesssecureapps

在C#中,您可以使用以下代码:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("email@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}
Run Code Online (Sandbox Code Playgroud)

-------------------
Michael Freidgeim在以下评论区分享的信息:
类似的答案与截图/sf/answers/2272022791/

  • 自 2022 年 5 月 30 日起,Googlem 不再支持安全性较低的应用程序,因此您必须使用应用程序密码。https://support.google.com/accounts/answer/6010255?authuser=1&amp;hl=en-GB&amp;authuser=1&amp;visit_id=637957424028050444-425688120&amp;p=less-secure-apps&amp;rd=1 (4认同)
  • 这应该是选择的答案 (3认同)
  • 这是我的问题,感谢您解决麻烦并给出更解释性的答复。 (2认同)

Ron*_*tel 45

首先检查gmail的安全相关问题.您可能已在gmail中启用了双重身份验证.如果您收到任何安全警报,请检查您的Gmail收件箱.在这种情况下,请检查@mjb的其他答案,如下所示

以下是我总是首先检查这些问题的一般事项

client.UseDefaultCredentials = true;
Run Code Online (Sandbox Code Playgroud)

将其设置为false.

注意@Joe King的答案 - 你必须在设置client.Credentials 之前设置client.UseDefaultCredentials .

  • 我试过了,但它对我不起作用. (22认同)
  • 注意@Joe King的答案 - 您必须在设置client.Credentials之前设置client.UseDefaultCredentials* (7认同)
  • 设置client.UseDefaultCredentials = false; 在client.Credentials和设置client.EnableSsl = true之前; 在我的情况下做了伎俩. (3认同)
  • 在这种情况下,您应该共享您的代码.以上答案是针对相关代码的 (2认同)
  • 这个答案不起作用,我认为大多数人在 gmail 方面都面临安全问题。请参阅 mjb 的答案以获得正确的解决方案 (2认同)
  • 另外,请确保已禁用“ Captcha”-如果您在远程服务器上运行脚本(在本地计算机上运行时不需要),则可能有必要:https://accounts.google.com/DisplayUnlockCaptcha (2认同)

Joe*_*ing 35

确保SmtpClient.Credentials 通话设置SmtpClient.UseDefaultCredentials = false.

顺序很重要,因为设置SmtpClient.UseDefaultCredentials = false将重置SmtpClient.Credentials为null.

  • @Joe King你只是很棒的队友.....从3小时开始搜索这个:) (4认同)
  • 我一直在寻找这个解决方案半小时,你的是互联网上唯一的小帖子,我发现它提到了这个的顺序.谢了哥们. (2认同)

Rom*_*n O 35

应用程序密码帮助了我。

  1. 转到https://myaccount.google.com/security
  2. 向下滚动到“您如何登录 Google”。
  3. 启用两步验证。
  4. 添加应用程序密码。
  5. 在代码中使用生成的密码。

您还可以使用直接链接https://myaccount.google.com/apppasswords

  • 2022 年 5 月 30 日后,删除不太安全的选项后,应用程序密码将起作用,您必须首先设置两步验证,然后您可以生成应用程序密码并在代码中使用它 (5认同)

Sta*_*ked 17

我已经搜索并尝试了几个小时不同的事情.总而言之,我必须考虑以下几点:

  1. smtp.gmail.com而不是smtp.google.com
  2. 使用端口587
  3. 设置client.UseDefaultCredentials = false;设置证书之前
  4. 为安全性较低的应用启用Access
  5. client.EnableSsl = true;

如果这些步骤没有帮助,请检查此答案.
也许,你也可以在这个System.Net.Mail FAQ上找到有用的东西.

  • 如果它仍然无法正常工作,请访问此链接 https://g.co/allowaccess 并允许访问 (4认同)

Fra*_*nco 15

自 2022 年 5 月 30 日起,Google 不再支持安全性较低的应用程序,因此您必须使用应用程序密码

https://support.google.com/accounts/answer/6010255?authuser=1&hl=en-GB&authuser=1&visit_id=637957424028050444-425688120&p=less-secure-apps&rd=1

以下是通过 google 设置应用程序密码的步骤: https://support.google.com/accounts/answer/185833 ?authuser=1

然后,您需要使用 16 个字符的应用程序密码作为 smtpClient 的凭据:

smtpClient = new SmtpClient(emailHost)
{
     Port = port,
     DeliveryMethod = SmtpDeliveryMethod.Network,
     Credentials = new NetworkCredential(fromEmail, emailPassword),
     EnableSsl = true,
 };
Run Code Online (Sandbox Code Playgroud)

emailpassword 应该是生成的 16 个字符的App Password

港口:587

电子邮件主机:smtp.gmail.com

然后剩下的代码:

var mailMessage = new MailMessage{
                    From = new MailAddress(fromEmail),
                    Subject = "Yoursubject",
                    Body = $"Your body",
                    IsBodyHtml = true,
                };
                mailMessage.To.Add(newEmail);

                if (smtpClient != null)
                    smtpClient.Send(mailMessage);
Run Code Online (Sandbox Code Playgroud)


小智 8

尝试登录您的Gmail帐户.如果您使用gmail SMTP发送电子邮件,它将被锁定.我不知道您可以在锁定之前发送的电子邮件的限制,但如果您登录一次,那么它将再次从代码中运行.确保您的webconfig设置良好.


med*_*eda 7

试试这种方式,我做了一些轻微的改变:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("mymailid@gmail.com");
msg.To.Add("receipientid@gmail.com");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;


using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("mymailid@gmail.com", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}
Run Code Online (Sandbox Code Playgroud)

如果您有邮件设置,请显示您的app.config文件.


Beh*_*shi 6

从此链接打开安全性较低的应用程序并繁荣...


Joh*_*idi 6

出于安全原因,Google 已停止为不太安全的应用程序启用访问权限,自 2021 年 5 月 30 日起生效。因此,此处强调启用不太安全的应用程序访问权限的一些答案已过时。

这是我在 VB 论坛上找到的答案,它对我有用。我能够成功发送邮件。

“请执行以下步骤。在 Google 帐户中激活两步验证。在 Google 帐户中选择应用程序密码 => 安全 => 登录 Google。在选择应用程序组合中选择其他并将名称命名为 Windows 应用程序,然后单击生成。复制密码并使用它可以代替电子邮件密码。它会起作用的。”

查看链接以查看更多答案。 https://www.vbforums.com/showthread.php?895413-通过-Gmail-changing-for-May-30发送电子邮件

向下滚动并查看 microbrain 发布的答案

请参阅下面我发送邮件所用的代码:

Dim emailTo As String = TxtEmail.Text.Trim()
        If emailTo.Length > 10 Then
            Try
                Dim Smtp_Server As New SmtpClient
                Dim e_mail As New MailMessage()
                Smtp_Server.UseDefaultCredentials = False
                Smtp_Server.Credentials = New Net.NetworkCredential("myemail@gmail.com", "***16-digit-code***")
                Smtp_Server.Port = 587
                Smtp_Server.EnableSsl = True
                Smtp_Server.Host = "smtp.gmail.com"

                e_mail = New MailMessage()
                e_mail.From = New MailAddress("myemailaddress@gmail.com")
                e_mail.To.Add(emailTo)
                e_mail.Subject = "Login OTP"
                e_mail.IsBodyHtml = False
                e_mail.Body = "some text here"
                Smtp_Server.Send(e_mail)
                MessageBox.Show("Your login OTP has been sent to " & emailTo)
                LblOTPSuccess.Visible = True
                TxtOTP.Visible = True
                BtnVerifyOTP.Visible = True
                TxtOTP.Focus()
            Catch error_t As Exception
                MessageBox.Show(error_t.ToString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Else
            MessageBox.Show("Email address is invalid or too short", "Invalid Email", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
Run Code Online (Sandbox Code Playgroud)

请记住更改代码中的参数以适合您。


小智 5

即使我将“UseDefaultCredentials”设置为 false,我也遇到了同样的问题。后来我发现根本原因是我在账户中开启了“两步验证”。我把它关掉后,问题就消失了。

  • 不要关闭两步验证。它的存在是有原因的。您可以在 GMail 设置中生成应用程序专用密码并在 SmtpClient 中使用该密码。无论如何,您都应该这样做,而不是暴露普通密码。 (5认同)

小智 5

尝试启用允许不太安全的应用程序访问。

在这里,您可以在使用 Gmail 登录后启用安全性较低的应用程序。

https://myaccount.google.com/lesssecureapps

谢谢。


归档时间:

查看次数:

252737 次

最近记录:

7 年,4 月 前