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身份验证 需要

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>

我应该做什么来解决这个错误和发送邮件? ?

615357 次浏览

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

下面是非常一般的事情,我总是首先检查这样的问题

client.UseDefaultCredentials = true;

设为假。

注意@Joe King 的 回答-您必须设置客户端

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

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 文件。

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

下面是我的代码。我也有同样的错误,但问题是我给了我的密码错误。下面的代码可以很好地工作。.试试看

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

您可以在 发邮件中引用它

我遇到了同样的问题,甚至我将“ UseDefaultCredentials”设置为 false。后来我发现,根本原因是我打开了“2步验证”在我的帐户。我把它关了之后,问题就解决了。

我也有同样的问题。

我已经找到了解决办法:

谷歌可能会屏蔽一些不使用现代安全标准的应用程序或设备的登录尝试。由于这些应用程序和设备更容易入侵,屏蔽它们有助于保持您的帐户安全。

不支援最新安全标准的应用程式包括:

  • IOS6或以下版本的 iPhone 或 iPad 上的邮件应用程序
  • 8.1版本之前 Windows 手机上的邮件应用程序
  • 一些桌面邮件客户端如微软 Outlook 和 Mozilla Thunderbird

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

登录谷歌账户后,访问:

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

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

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

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

enter image description here 确保允许访问不太安全的应用程序。

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

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

您应该考虑在配置文件中指定 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>

从这个 链接打开不太安全的应用程序,然后..。

几个小时以来,我一直在寻找和尝试不同的方法。总结一下,我必须考虑以下几点:

  1. 使用 smtp.gmail.com代替 smtp.google.com
  2. 使用端口587
  3. 在设置凭据之前设置 client.UseDefaultCredentials = false;
  4. 打开 不太安全的应用程序的访问权限
  5. 设定 client.EnableSsl = true;

如果这些步骤没有帮助,检查这个 回答
也许,你也可以在这个 邮件系统常见问题解答上找到一些有用的东西。

在转动 不太安全的选项并尝试其他解决方案之后,如果你仍然面临同样的问题,尝试使用这个过载:

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

而不是:

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

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

在这里,您可以启用不太安全的应用程序后登录与您的 Gmail。

Https://myaccount.google.com/lesssecureapps

谢谢。

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

希望这个能帮上忙。

如果你在一个测试环境,不想设置安全设置,你必须允许不太安全的应用程序通过。Gmail 中的这个链接。

Https://myaccount.google.com/lesssecureapps

我也面临着这样的问题 “ SMTP 服务器需要安全连接或客户端未经身份验证。服务器响应为: 需要5.5.0身份验证” 然后通过这么多的网络资料,但它没有帮助我完全。我是如何解决它像

第一步: smtp.gmail.com 是 gmail 服务器,所以进入你的账户 gmail 设置-> 点击查看所有设置-> 转发和 IMAP/POP-> 检查弹出和 IMAP 启用,如果不启用-> 保存更改。 第二步-点击你的 gmail 配置文件图片-> 点击管理你的谷歌帐户-> 进入安全标签-> 检查访问不太安全的应用程序(这个选项将可用,如果你没有选择两步验证)-> 默认情况下,谷歌将设置为禁用,使其能够使用您的真正的 gmail 密码发送电子邮件。 注意:-为不太安全的应用程序启用 gmail 访问,可能对你有危险,所以我不建议这样做

第3步:-如果您的帐户启用了两步验证,或者想使用 gmail 以外的密码使用应用程序特定的密码,那么尝试这样做:- 点击你的 gmail 配置文件图片-> 点击管理你的谷歌账户-> 进入安全标签-> 搜索 APP 密码-> 选择任何给定的应用名称-> 选择任何设备名称-> 点击生成-> 复制16位密码并粘贴到你的应用中,在那里你必须输入一个 gmail 密码代替你真正的 gmail 密码。

我今天早上创建了一个 Microsoft365Developer 订阅(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个多小时玩微软365管理中心设置和阅读文章,以找出这个问题。最后,我改变了我的微软365管理中心密码,它像一个魅力。因此,在考虑任何预先解决方案之前,在收到此消息时尝试更改密码是值得的。

请注意,密码不是无效的,因为我登录到我的微软365帐户没有任何问题。然而,密码更改解决了这个问题。

我也有同样的问题,就是通过把密码改成强密码来解决的。

如果使用 Office365帐户遇到此问题。在 ExchangeOnline 中,默认情况下,将对所有 Office365邮箱帐户禁用 SMTP 客户端身份验证。您必须为有问题的帐户手动启用 SMTP Auth,并再次检查这种情况。检查下面的螺纹。

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

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

我使用的步骤 在这个问题中和它为我工作。

我的问题是 G 套件并不认为我的密码很强大,在改变它之后,它工作得很完美。

应用程序密码帮了我。

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

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

Https://g.co/allowaccess

如果: 1)用户或通行证是错误的 2)不启用 SSL 3)不安全的应用程序不能启用 4)你还没有用这封邮件登录到服务器 5)你还没有设置客户端

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

说到这里,我找到了正确的方法来实现这个工作,确实是首先从我的 G Suite 帐户配置 SMTP 中继服务:

SMTP_Relay Configuration GSuite

Relay Settings Details

IPv6地址是 MX 记录所指向的 Web 服务器的地址(例如: 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);

请注意,这种方法是 使用默认凭证 = 真,而不是其他解决方案中建议的 假的。另外,由于我们使用 IPv6地址连接到 SMTP 客户机,因此不需要指定用户名或密码。因此,在我看来,这是一种更加安全可靠的方法。

对我来说,我也面临着同样的问题。经过长时间的研究之后,不要将 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);

现在对于两个修改过的代码都可以正常工作了,所以在这种情况下顺序很重要。

干杯!

这样试试 并且必须通过点击这个 < href = “ https://myAccount.google.com/less secureapps? pli = 1 & amp; rapt = AEjHL4MGhZ9iEJFsX9QiNL8ne4KXjN5FZiiUnI0kJKiNsrjh5Ai-23 _ 6Bn6Bk8F9u7WYTqukZc982aUnZ7j _ dgtqpG27DD2eRA”rel = “ nofollow noReferrer”> 链接来启用 不太安全的应用程序

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

从2022年5月30日起,谷歌不再支持 不太安全的应用程序,所以你必须使用 应用程序密码

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

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

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

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

电子邮件密码应该是生成的16个字符 应用程序密码

端口: 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);

出于安全原因,谷歌已经从2021年5月30日起停止启用安全性较低的应用程序访问。因此,这里强调对不太安全的应用程序启用访问的一些答案已经过时了。

这是我在 VB 论坛上找到的一个答案,它对我很有用。我成功地发送了一封邮件。

”请按照以下步骤。 在谷歌帐户激活2步验证。 在 Google 帐户中选择 App Password = > Security = > Sign to Google。 在选择应用程序组合选择其他和名称为 Windows 应用程序并单击生成它。 复制密码并用它来代替电子邮件密码。 它会起作用的。”

点击链接查看更多答案。 Https://www.vbforums.com/showthread.php?895413-sending-email-via-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

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

删除端口字段在我的案例中起作用了