可以';t通过MailMessage&;smtpClient
本文关键字:amp smtpClient MailMessage 可以 通过 | 更新日期: 2023-09-27 18:22:05
我一辈子都不明白为什么不起作用
SmtpClient smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
UseDefaultCredentials = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"),
EnableSsl = true,
Timeout = 10000
};
smtp.Send(mail);
我得到:
SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:5.5.1需要身份验证。
我只是将EnableSsl指定为true,所以这不应该是安全连接方面的问题。
我从本地主机运行这个。是的,我输入的用户名和密码(我的gmail帐户凭据)是100%正确的。
我知道这是个老话题,但是。。。谷歌更改了一些安全设置。
我一直在纠结所有的答案,直到我用谷歌的一封邮件查看了我的电子邮件,邮件中说"我们最近阻止了你的谷歌账户登录"。
这让我看到了这一页:谷歌账户安全
在"访问不太安全的应用程序"部分,您可以启用从其他设备/应用程序访问您的帐户。。。就像你的C#应用程序一样。
请注意,不再有"特定应用程序"部分。
希望这能帮助到别人。。。我刚刚失去了30分钟的生命。。。
如果登录信息100%正确,则需要先设置UseDefaultCredentials = false
,然后设置要使用Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere")
的凭据。
如果先设置凭据,则在设置UseDefaultCredentials = false
时,会将Credentials
属性设置为null
。
这是有线的,但它发生在我身上。
在调用smtp.Send(message);
之前,调试代码并检查Credentials
属性是否为null。如果是,请尝试颠倒顺序。看起来它的顺序是正确的,但如果它为null,就不要使用内联初始化。
希望能有所帮助。
编辑:如果您使用两步验证,请确保您使用的是应用程序特定密码
看起来Gmail需要特定于应用程序的密码(而不是主密码)。
请调查一下:http://support.google.com/mail/bin/answer.py?hl=en&答案=1173270
我最近也遇到了同样的问题。
这对我来说很好
SmtpClient smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
UseDefaultCredentials = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential("myid@gmail.com", "mypassword"),
EnableSsl = true,
Timeout = 10000
};
MailMessage message = new MailMessage();
message.Body = "hello there";
message.Subject = "hi!!";
message.To.Add("myid@gmail.com");
message.From = new MailAddress("myid@gmail.com");
smtp.Send(message);
我以前遇到过这个问题,并通过以下步骤解决了它:
- 转到"我的帐户"设置
- 单击"登录和安全"类别
- 向下滚动至"已连接的应用程序和网站"部分
- 关闭"允许不太安全的应用"选项
我刚刚关闭了这个选项,我的代码成功运行了。
对我来说,解决方案需要两个"步骤":
- 先设置
UseDefaultCredentials = false
,然后设置要使用Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere")
的凭据。首先设置凭据,当我设置UseDefaultCredentials = false
时,将使凭据属性成为null
- 允许在我的谷歌个人资料上使用不太安全的应用程序
进行如下回调。告诉System.Net
忽略错误!
在调用Send()
之前添加此
ServicePointManager.ServerCertificateValidationCallback =
delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{ return true; };
smtp.Send(mail);
<mailSettings>
<smtp from="youremail@gmail.com">
<network host="smtp.gmail.com" password="yourpassword" port="587" userName="username"/>
</smtp>
</mailSettings>
编辑:尝试在此之后添加此行smtp.Credentials = Credentials
Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"),
从运行在Amazon AWS主机上的ASP.NET应用程序访问smtp.gmail.com时遇到同样的问题。事实证明,我的配置是正确的——它在另一台计算机上也运行良好——但gmail会拒绝我的登录尝试,因为我尝试从一个不寻常的位置登录。我通过网络界面(www.gmail.com)登录了gmail,不得不回答一个captcha。在那之后,它起了作用。
我的问题是我们gmail帐户的域所有者禁用了"访问不太安全的应用程序"和两步身份验证。没有办法启用它,我甚至看不到设置。所以我用我的个人账户进行了测试,结果很好。
对于C#WPF应用程序,只需遵循以下步骤即可:
private void SendByGmail(string subject, string body, string recepientEmail, string MailMsgFrom, string MailMsgPass)
{
using (MailMessage mailMessage = new MailMessage())
{
mailMessage.From = new MailAddress(MailMsgFrom);
mailMessage.Subject = subject;
mailMessage.Body = body;
mailMessage.IsBodyHtml = true;
mailMessage.To.Add(new MailAddress(recepientEmail));
mailMessage.Priority = System.Net.Mail.MailPriority.High;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
smtp.Timeout = 200000;
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = MailMsgFrom;
NetworkCred.Password = MailMsgPass;
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.Send(mailMessage);
}
}
之后你应该得到这样的错误
smtpException {"The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at"} System.Net.Mail.SmtpException
要解决这个问题,首先在网络浏览器中将您的电子邮件帐户登录到您的谷歌帐户。然后只需按照这个链接谷歌帐户活动。然后你会得到最近的设备&活动。如果显示阻止您当前设备上的当前活动。只需取消阻止即可。然后重试发送电子邮件
感谢