ChatGPT解决这个技术问题 Extra ChatGPT

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

我想从我的应用程序中发送一封电子邮件,并且我已经编写了以下用于发送邮件的代码

    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);

我在本地主机上运行它,所以我在发送它时犯了什么错误。

当我发送按钮时,它会给出一个错误,例如

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>

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

我想你也可能需要看看这个答案:stackoverflow.com/a/9572958/1136253
我有同样的问题。检查 [这篇文章][1] [1]: stackoverflow.com/a/20186909/709340
您应该考虑在配置文件中指定 SMTP 配置数据,并且不要在代码中覆盖它们 - 请参阅 systemnetmail.com/faq/4.1.aspx 处的 SMTP 配置数据

m
mjb

我也有同样的问题。

我找到了这个解决方案:

Google 可能会阻止来自不使用现代安全标准的某些应用或设备的登录尝试。由于这些应用程序和设备更容易被入侵,因此阻止它们有助于确保您的帐户更安全。

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

装有 iOS 6 或更低版本的 iPhone 或 iPad 上的邮件应用

8.1 版本之前的 Windows 手机上的邮件应用程序

一些桌面邮件客户端,如 Microsoft Outlook 和 Mozilla Thunderbird

因此,您必须在您的 Google 帐户中启用不太安全的登录(或不太安全的应用程序访问)。

登录谷歌账号后,访问:

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

https://myaccount.google.com/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);
    }
}

这与确保在代码中启用 SSL 一起创造了奇迹,非常感谢
比你@mjb 分享答案。它救了我的命:)
这应该是选定的答案
这是我的问题,感谢您解决问题并给出更具解释性的答案。
也为我工作。谢谢@mjb
C
Community

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

以下是我总是首先检查此类问题的非常普遍的事情

client.UseDefaultCredentials = true;

将其设置为假。

注意@Joe King 的answer - 您必须设置 client.UseDefaultCredentials before 您设置 client.Credentials


在这种情况下,您应该共享您的代码。以上答案适用于有问题的代码
注意@Joe King 的回答 - 您必须在设置 client.Credentials 之前设置 client.UseDefaultCredentials
这个答案行不通,我认为大多数人在 gmail 方面都面临安全问题。请参阅 mjb 的答案以获得正确的解决方案
此外,请确保禁用“Captcha” - 如果您在远程服务器上运行脚本,这可能是必需的(在本地计算机上运行时不需要):accounts.google.com/DisplayUnlockCaptcha
设置 client.UseDefaultCredentials = false;在 client.Credentials 和设置 client.EnableSsl = true 之前;在我的情况下成功了。
J
Joseph King

确保在调用 SmtpClient.UseDefaultCredentials = false 之后设置 SmtpClient.Credentials

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


我一直在寻找这个问题的解决方案半小时,你的是我在互联网上发现的唯一一个提到这个排序的小帖子。谢了哥们。
@Joe King 你真是太棒了……从 3 小时开始就一直在寻找这个 :)
谢谢@Joe King,这是 MS 文档中缺少的重要信息。这也是我使用用户名和密码发送问题的解决方案。
这很容易被忽视,但正如我刚刚发现的那样,排序很重要。
是的。拯救了我的一天。您需要在设置凭据之前调用 UseDefaultCredentials = false。
C
Community

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

使用 smtp.gmail.com 而不是 smtp.google.com 使用端口 587 设置 client.UseDefaultCredentials = false;在设置凭据之前为不太安全的应用程序打开访问设置 client.EnableSsl = true;

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


这个答案非常有用......解决了我的问题。非常感谢
如果仍然无法正常工作,请访问此链接 g.co/allowaccess 并允许访问
“访问不太安全的应用程序”节省了我的时间。
这部分为我做了:“为不太安全的应用程序打开访问权限”。谢谢!
访问不太安全的应用程序请注意,您可能通过两个帐户登录,然后在另一个帐户上更改了它
S
Shuchita Bora

尝试登录您的 gmail 帐户。如果您使用 gmail SMTP 发送电子邮件,它会被锁定。我不知道在它被锁定之前你可以发送的电子邮件的限制,但如果你登录一次,它就会再次从代码中工作。确保您的 webconfig 设置良好。


确实是最佳答案!我再次登录,它工作! PS:我必须在 Google 上提供验证码
我收到此错误,因为我的 Google 帐户受到双重身份验证的保护。我最终创建了一个专用帐户来发送电子邮件。
m
meda

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

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);
}

如果您在那里有邮件设置,请同时显示您的 app.config 文件。


我还没有在里面配置。我应该在那里写什么?
我的 mvc 应用程序中没有 app.config 文件。
我尝试了许多其他解决方案,但只有这个有效。谢谢
R
Roman O

应用密码帮助了我。

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


尽管此解决方案有效,但它会将电子邮件直接发送到垃圾邮件文件夹。请仔细检查。谢谢。
2022 年 5 月 30 日之后,删除了不太安全的选项,应用密码正在工作,您必须先设置两步验证,然后您才能生成应用密码并在您的代码中使用它
B
Behzad Qureshi

从这个 link 中打开不太安全的应用程序,然后繁荣...


这对我有用..这必须是公认的答案
R
Raviteja V

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

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

https://myaccount.google.com/lesssecureapps

谢谢。


S
Shivam Srivastava

https://i.stack.imgur.com/KWKEe.png

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("xx@gmail.com");
        mail.Sender = new MailAddress("xx@gmail.com");
        mail.To.Add("external@emailaddress");
        mail.IsBodyHtml = true;
        mail.Subject = "Email Sent";
        mail.Body = "Body content from";

        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
        smtp.UseDefaultCredentials = false;

        smtp.Credentials = new System.Net.NetworkCredential("xx@gmail.com", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }

切换“访问不太安全的应用程序”设置的链接在这里 - google.com/settings/security/lesssecureapps更改设置并没有帮助我克服错误
S
Soros Liu

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


不要关闭两步验证。它的存在是有原因的。您可以在 GMail 设置中生成应用程序专用密码并在 SmtpClient 中使用该密码。您应该这样做,而不是公开普通密码。
G
Ganesh Pillai N

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

            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);

您可以在 Sending mail 中引用它


M
Mahmud

我多次遇到同样的问题。启用不太安全的应用程序选项后,问题解决了。从此处启用安全性较低的应用程序:https://myaccount.google.com/lesssecureapps

希望这会有所帮助。


N
Naimatullah

就我而言,我面临着同样的问题。经过长时间的研究,不要将 UseDefaultCredentials 值设置为 false。因为 UseDefaultCredentials 的默认值为 false。

另一个关键点是在 client.send(message) 语句之前设置网络凭据。

错误代码:

SmtpClient client = new SmtpClient();
client.Host = ServerName; 
var credentials = new System.Net.NetworkCredential(UserName, Password);
client.Credentials = credentials;
client.Port = Port;
client.EnableSsl = EnableSSL;
client.UseDefaultCredentials = false;
client.Send(message);

错误代码:

SmtpClient client = new SmtpClient();
client.Host = ServerName; 
var credentials = new System.Net.NetworkCredential(UserName, Password);
client.Credentials = credentials;
client.Port = Port;
client.EnableSsl = EnableSSL;
client.UseDefaultCredentials = true;
client.Send(message);

正确的代码

SmtpClient client = new SmtpClient();
client.Host = ServerName; 
var credentials = new System.Net.NetworkCredential(UserName, Password);
client.Credentials = credentials;
client.Port = Port;
client.EnableSsl = EnableSSL;
// client.UseDefaultCredentials = true;
client.Send(message);

正确的代码

SmtpClient client = new SmtpClient();
client.Host = ServerName; 
client.Port = Port;
client.EnableSsl = EnableSSL;
client.UseDefaultCredentials = false;
var credentials = new System.Net.NetworkCredential(UserName, Password);
client.Credentials = credentials;
client.Send(message);

现在它与两个更正的代码都可以正常工作。所以在这种情况下,顺序很重要。

干杯!


E
Ezequiel Santana

如果它是一个新的 google 帐户,您必须通过常规用户界面发送一封电子邮件(第一个)。之后,您可以使用您的应用程序/机器人发送消息。


M
Michael Freidgeim

您应该考虑在配置文件中指定 SMTP 配置数据,并且不要在代码中覆盖它们 - 请参阅 http://www.systemnetmail.com/faq/4.1.aspx 处的 SMTP 配置数据

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="admin@example.com">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="admin@example.com" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>

F
Fahad S. Ali

如果您在测试环境中并且不想设置安全设置,则必须允许安全性较低的应用程序通过。 Gmail 中的此链接。

https://myaccount.google.com/lesssecureapps


K
Kushan Randima

我今天早上创建了一个 Microsoft 365 Developer subscription (E5),并使用以下设置发送了一封测试电子邮件

using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential(username, password);
    client.Host = "smtp.office365.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

一开始它不起作用,因为我不断收到此错误消息以及此代码引发的异常。然后,我花了大约 4 个多小时来使用 Microsoft 365 管理中心设置并阅读文章以找出问题所在。最终,我更改了我的 Microsoft 365 管理中心密码,它就像一个魅力。因此,在考虑任何高级解决方案之前,有必要在收到此消息时尝试更改密码。

请注意,当我毫无问题地登录到我的 Microsoft 365 帐户时,密码肯定不是无效的。但是,密码更改解决了这个问题。


J
Joseph L.

在浏览了每个提出的解决方案之后,我意识到正确的答案取决于您当前的服务器和电子邮件客户端情况。就我而言,我的 MX 记录指向我的本地出站服务器。此外,由于我使用 G Suite 而不是 Gmail 来发送通知电子邮件,因此我必须遵循以下配置:https://support.google.com/a/answer/2956491?hl=en

话虽如此,我找到了完成这项工作的正确方法,确实是首先从我的 G Suite 帐户配置 SMTP 中继服务:

https://i.stack.imgur.com/CYIII.png

https://i.stack.imgur.com/HnzFQ.png

IPv6 地址是 MX 记录指向的网络服务器的地址(例如:1234:454:c88a:d8e7:25c0:2a9a:5aa2:104)。

完成后,使用此代码补充解决方案:

 //Set email provider credentials
 SmtpClient smtpClient = new SmtpClient("smtp-relay.gmail.com", "587");                   

 smtpClient.EnableSsl = true;
 smtpClient.UseDefaultCredentials = true;
 
 MailAddress from = new MailAddress("username@yourdomain.com", "EmailFromAlias");
 MailAddress to = new MailAddress("destination@anydomain.com");

 MailMessage = new MailMessage(from, to);

 MailMessage.Subject = subject;
 MyMailMessage.Body = message;

 MyMailMessage.IsBodyHtml = false;

 smtpClient.Send(MyMailMessage);

请注意,使用此方法 smtpClient.UseDefaultCredentials = true;而不是其他解决方案中建议的错误。此外,由于我们使用 IPv6 地址连接 SMTP 客户端,因此不需要指定用户名或密码。因此,在我看来,这是一种更安全、更安全的方法。


admin.google.com 仅用于 Google Workspace 帐户。普通 Gmail 帐户不能用于登录 admin.google.com
Y
Yakir Manor

一些 smtp 服务器(安全的)要求您同时提供用户名和电子邮件,如果它的 gmail 则很可能是您需要解决的“不太安全的登录”问题,否则您可以尝试:

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port)
{
    var loginInfo = new NetworkCredential(username, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient(smtp, port);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

请注意,来自的电子邮件和用户名是不同的,这与某些将它们称为相同的实现不同。

调用此方法可以这样完成:

SendEmail("to-mail@gmail.com", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

s
ssmsexe

在转 less secure option on 并尝试其他解决方案后,如果您仍然面临同样的问题,请尝试使用此重载:

client.Credentials = new NetworkCredential("mymailid", "mypassword");

代替:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");

F
Farzaneh Talebi

我有同样的问题,通过将密码更改为强密码解决了。


K
Kevin M

如果您在使用 Office 365 帐户时遇到此问题。在 Exchange Online 中,默认情况下,将为所有 Office 365 邮箱帐户禁用 SMTP 客户端身份验证。您必须为有问题的帐户手动启用 SMTP Auth 并再次检查案例。检查以下线程。

https://morgantechspace.com/2021/01/the-smtp-server-requires-a-secure-connection-or-the-client.html

https://docs.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission


S
Simple Code

我已经使用了步骤 in this question,它对我有用。

我的问题是 G Suite 认为我的密码不安全,更改后它运行良好。


D
DonSleza4e

如果所有提到的解决方案都没有帮助,请尝试使用此 URL - 它帮助我解除阻止在我的网站上发送电子邮件

https://g.co/allowaccess


D
Dayannex

这可能是:1)用户或密码错误 2)未启用 SSL 3)安全应用程序未启用 4)您尚未使用此邮件登录服务器 5)您尚未设置 client.UseDefaultCredentials = false


G
Gadiyevich

尝试这种方式,并通过单击此链接来启用安全性较低的应用程序

        var fromEmail = new MailAddress("your@gmail.com", "Title");
        var toEmail = new MailAddress(emailID);
        var fromEmailPassword = "yourPassword"; 
         

        var smtp = new SmtpClient
        {
            Host = "smtp.gmail.com",
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(fromEmail.Address, fromEmailPassword)
        };
            using (var message = new MailMessage(fromEmail, toEmail)
            {
                Subject = subject,
                Body = body,
                IsBodyHtml = true
            })

                smtp.Send(message);

S
Suryakant_Dubalgunde

我还面临着“SMTP 服务器需要安全连接或客户端未通过身份验证”之类的问题。服务器响应是:5.5.0 Authentication Required' 然后浏览了很多互联网资料,但它并没有完全帮助我。我是如何解决的

step1:smtp.gmail.com 是 gmail 服务器,所以转到您的帐户 gmail 设置->单击查看所有设置->转发和 IMAP/POP->检查弹出和 imap 是否已启用,如果未启用它->保存更改。 step2-单击您的gmail个人资料图片->单击管理您的google帐户->转到安全选项卡->检查访问安全性较低的应用程序(如果您没有选择两步验证,则此选项可用)->默认情况下谷歌将其设置为禁用,使其能够使用您的真实 gmail 密码来发送电子邮件。注意:-为不太安全的应用程序启用 gmail 访问,可能对您很危险,所以我不推荐这样做

第 3 步:-如果您的帐户启用了两步验证,或者想要使用您的 gmail 真实密码以外的密码,请尝试以下操作:- 单击您的 gmail 个人资料图片->单击管理您的 google 帐户->转到安全性选项卡->搜索应用程序密码->选择任何给定的应用程序名称->选择任何设备名称->单击生成->复制 16 位密码并将其粘贴到您必须输入 gmail 密码的应用程序中您真正的 gmail 密码。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅