我想从我的应用程序发送一封电子邮件,并且我已经编写了以下用于发送邮件的代码
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);
我在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>
如何解决此错误并发送邮件?
答案 0 :(得分:88)
我有同样的问题。
我找到了这个解决方案:
Google可能阻止某些不使用现代安全标准的应用或设备尝试登录。由于这些应用和设备更易于破解,因此阻止它们有助于保持帐户安全。
不支持最新安全标准的应用程序的一些示例包括:
因此,您必须在Google帐户中启用安全登录。
登录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);
}
}
-------------------
Michael Freidgeim在以下评论区分享的信息:
屏幕截图https://stackoverflow.com/a/32457468/52277
答案 1 :(得分:38)
首先检查gmail的安全相关问题。您可能已在gmail中启用了双重身份验证。如果您收到任何安全警报,请检查您的Gmail收件箱。在这种情况下,请检查@mjb的其他答案,如下所示
以下是我总是先检查这些问题的一般事项
client.UseDefaultCredentials = true;
将其设置为false。
注意@Joe King的answer - 您必须在设置client.Credentials
之前设置client.UseDefaultCredentials答案 2 :(得分:32)
确保在致电SmtpClient.Credentials
后设置SmtpClient.UseDefaultCredentials = false
。
订单非常重要,因为设置SmtpClient.UseDefaultCredentials = false
会将SmtpClient.Credentials
重置为空。
答案 3 :(得分:17)
我已经搜索并尝试了几个小时不同的事情。总而言之,我必须考虑以下几点:
smtp.gmail.com
代替smtp.google.com
client.UseDefaultCredentials = false;
client.EnableSsl = true;
如果这些步骤无效,请查看answer 也许,你也可以在System.Net.Mail FAQ找到有用的东西。
答案 4 :(得分:8)
尝试登录您的Gmail帐户。如果您使用gmail SMTP发送电子邮件,它将被锁定。我不知道您可以在锁定之前发送的电子邮件的限制,但如果您登录一次,那么它将再次从代码中运行。 确保您的webconfig设置良好。
答案 5 :(得分: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);
}
如果您有邮件设置,请显示您的app.config文件。
答案 6 :(得分:3)
即使我设置了#34; UseDefaultCredentials&#34;我也遇到了同样的问题。为假。后来我发现根本原因是我打开了&#34; 2步验证&#34;在我的帐户中。在我关闭之后,问题就消失了。
答案 7 :(得分:2)
确保允许访问安全性较低的应用。
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;
}
答案 8 :(得分:1)
如果是新的Google帐户,则必须通过常规用户界面发送电子邮件(第一个)。之后,您可以使用应用程序/机器人发送消息。
答案 9 :(得分:1)
您应该考虑在配置文件中指定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>
答案 10 :(得分:1)
从此link打开安全性较低的应用并繁荣......
答案 11 :(得分:1)
下面是我的代码。我也有同样的错误,但问题是我给了我的密码错误。下面的代码将完美地工作..它
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
中查看它答案 12 :(得分:1)
应用密码帮助了我。
答案 13 :(得分:1)
我多次遇到相同的问题。启用不太安全的应用程序选项后,问题得以解决。 从此处启用安全性较低的应用:https://myaccount.google.com/lesssecureapps
希望这会有所帮助。
答案 14 :(得分:1)
如果您处于测试环境中并且不想设置安全设置,则必须允许安全性较低的应用程序通过。 Gmail中的此链接。
答案 15 :(得分:1)
我今天早上创建了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帐户没有任何问题时,密码肯定不是无效的。但是,密码更改解决了该问题。
答案 16 :(得分:0)
如果: 1)用户或通行证错误 2) 不启用 SSL 3) 安全性较低的应用程序未启用 4)您还没有使用此邮件登录服务器 5)你没有设置client.UseDefaultCredentials = false
答案 17 :(得分:0)
如果所有提到的解决方案都没有帮助,请尝试使用此 URL - 它帮助我取消阻止在我的网站上发送电子邮件
答案 18 :(得分:0)
我已经使用了步骤 in this question 并且它对我有用。
我的问题是 G Suite 认为我的密码不强,更改后它运行良好。
答案 19 :(得分:0)
如果您使用 Office 365 帐户遇到此问题。在 Exchange Online 中,默认情况下,将对所有 Office 365 邮箱帐户禁用 SMTP 客户端身份验证。您必须为有问题的帐户手动启用 SMTP 身份验证并再次检查案例。检查以下线程。
https://morgantechspace.com/2021/01/the-smtp-server-requires-a-secure-connection-or-the-client.html
答案 20 :(得分:0)
我遇到了同样的问题,可以通过将密码更改为强密码来解决。
答案 21 :(得分:0)
答案 22 :(得分:0)
转动less secure option on并尝试其他解决方案后,如果您仍然面临同样的问题,请尝试使用此重载:
client.Credentials = new NetworkCredential("mymailid", "mypassword");
而不是:
client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
答案 23 :(得分:0)
某些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);
答案 24 :(得分:-1)
我也面临着类似的问题 'SMTP服务器需要安全的连接,或者客户端未通过身份验证。服务器响应为:5.5.0需要身份验证' 然后浏览了很多互联网资料,但并没有完全帮助我。我是怎么解决的
step1:smtp.gmail.com是gmail服务器,因此请转到您的帐户gmail设置->单击查看所有设置->转发和IMAP / POP->检查弹出窗口并启用imap(如果未启用它)->保存变化。 步骤2-单击您的gmail个人资料图片->单击管理您的Google帐户->转到安全选项卡->检查对安全性较低的应用程序的访问权限(如果您未选择两步验证,此选项将可用)->默认情况下Google会将其设置为禁用,使其启用以使用您的真实Gmail密码发送电子邮件。 注意:-为不太安全的应用启用gmail访问,可能对您很危险,因此我不建议这样做
第3步:-如果您的帐户启用了两步验证,或者想使用应用专用密码使用除Gmail真实密码之外的其他密码,请尝试以下操作:- 点击您的gmail个人资料图片->点击管理您的Google帐户->转到安全标签->搜索APP密码->选择给定的任何应用程序名称->选择任意设备名称->点击生成->复制16-数字密码,然后将其粘贴到您的应用中,您必须在其中输入gmail密码来代替您的真实gmail密码。