我想从我的应用程序发送一封电子邮件,我写了以下代码来发送邮件
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>
我该怎么做才能解决这个错误并发送邮件?
15 回答
首先检查gmail的安全相关问题 . 您可能已在gmail中启用了双重身份验证 . 如果您收到任何安全警报,请检查您的Gmail收件箱 . 在这种情况下,请检查@mjb的其他答案,如下所示
以下是我总是首先检查这些问题的一般事项
将其设置为false .
注意@Joe King的answer - 你必须设置client.UseDefaultCredentials before 你设置client.Credentials
您应该考虑在配置文件中指定SMTP配置数据,而不是在代码中覆盖它们 - 请参阅http://www.systemnetmail.com/faq/4.1.aspx上的SMTP配置数据
打开这个不太安全的应用程序link并繁荣......
我也有同样的问题 .
我找到了这个解决方案:
Google可能阻止某些不使用现代安全标准的应用或设备尝试登录 . 由于这些应用和设备更易于破解,因此阻止它们有助于确保您的帐户更安全 .
一些不支持最新安全标准的应用程序示例包括:
适用于iOS 6或更低版本的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#中,您可以使用以下代码:
Michael Freidgeim在以下评论区分享的信息:
类似的答案与截图https://stackoverflow.com/a/32457468/52277
确保设置
SmtpClient.Credentials
after ,调用SmtpClient.UseDefaultCredentials = false
.顺序很重要,因为设置
SmtpClient.UseDefaultCredentials = false
会将SmtpClient.Credentials
重置为null .我已经搜索并尝试了几个小时不同的事情 . 总而言之,我必须考虑以下几点:
使用
smtp.gmail.com
而不是smtp.google.com
使用端口587
在设置凭据之前设置
client.UseDefaultCredentials = false;
打开Access for less secure apps
设置
client.EnableSsl = true;
如果这些步骤没有帮助,请检查answer .
也许,你也可以在这个System.Net.Mail FAQ找到有用的东西 .
尝试登录您的Gmail帐户 . 如果您使用gmail SMTP发送电子邮件,它将被锁定 . 我不知道您可以在锁定之前发送的电子邮件的限制,但如果您登录一次,那么它将再次从代码中运行 . 确保您的webconfig设置良好 .
试试这种方式,我做了一些轻微的改变:
如果您有邮件设置,请显示您的app.config文件 .
即使我将“UseDefaultCredentials”设置为false,我也遇到了同样的问题 . 后来我发现根本原因是我在我的帐户中打开了“两步验证” . 关闭后,问题就消失了 .
确保允许访问安全性较低的应用 .
下面是我的代码 . 我也有同样的错误,但问题是我给了我的密码错误 . 下面的代码将完美地工作..它
你可以在Sending mail中提供它
如果是新的Google帐户,则必须通过常规用户界面发送电子邮件(第一个) . 之后,您可以使用应用程序/机器人发送消息 .
一些smtp服务器(安全服务器)要求你提供用户名和电子邮件,如果它的gmail然后大多数机会你需要解决的“安全登录”问题,否则你可以尝试:
请注意,来自和用户名的电子邮件是不同的,而不像某些实现将它们称为相同 .
调用此方法可以这样完成:
在转动less secure option on并尝试其他解决方案后,如果您仍然面临同样的问题,请尝试使用此重载:
代替:
尝试启用允许不太安全的应用访问 .
在这里,您可以在登录后启用不太安全的应用程序Gmail中 .
https://myaccount.google.com/lesssecureapps
谢谢 .