如何使用 Gmail 的 SMTP 客户端在 C# 中向自己发送电子邮件,而无需在 Gmail 设置中启用安全性较低的应用程序的访问权限?
Posted
技术标签:
【中文标题】如何使用 Gmail 的 SMTP 客户端在 C# 中向自己发送电子邮件,而无需在 Gmail 设置中启用安全性较低的应用程序的访问权限?【英文标题】:How do I use Gmail's SMTP client to send an email to myself in C# without enabling access for less secure apps in Gmail settings? 【发布时间】:2014-09-30 20:32:53 【问题描述】:我正在开发一个 ASP.NET Web 窗体应用程序,并且我正在尝试以编程方式向自己发送一封电子邮件。我正在使用 Gmail 的 SMTP 客户端,一切都很好,只是当我发送邮件时,我收到了这个错误:
"System.Net.Mail.SmtpException: SMTP 服务器需要一个安全的 连接或客户端未通过身份验证。服务器响应 是:5.5.1 需要身份验证。了解更多信息,请访问“
如果我进入我的 gmail 帐户设置并启用一个允许我允许访问“不太安全的应用程序”的选项,那么一切正常。我想知道启用此选项后如何发送电子邮件。
protected void sendEmail(object sender, EventArgs e)
var client = new SmtpClient("smtp.gmail.com", 587)
Credentials = new System.Net.NetworkCredential("myusername@gmail.com", "mypassword"),
DeliveryMethod = SmtpDeliveryMethod.Network,
EnableSsl = true
;
MailAddress from = new MailAddress("myusername@gmail.com", "Torchedmuffinz");
MailAddress to = new MailAddress("myusername@gmail.com", "Torchedmuffinz");
MailMessage message = new MailMessage(from, to);
message.Subject = "test";
message.Body = "test";
Attachment attachFile = new Attachment(@"pathtofile");
message.Attachments.Add(attachFile);
try client.Send(message);
catch (Exception email_exception)
System.Diagnostics.Debug.WriteLine(email_exception);
【问题讨论】:
不确定您的意思。您正在使用具有设置要求的系统 (GMAIL),以便您使用它... @EdSf 我不确定这些要求是什么。在深入挖掘之后,我发现了一篇文章link,表明他们在某个时候切换到“OAuth 2.0”,但直到最近才开始强制执行。假设我的问题来自于此,我现在正在尝试学习如何使我的应用程序遵守这一点。 @Torchedmuffinz - 我尝试了你的代码,如果我将端口更改为 25 而不是 587,它对我有用。 您是否尝试过使用电子邮件客户端(如 Outlook)并确保您可以使用它成功发送电子邮件?我之所以这么问,是因为 Gmail 确实有一些有趣的身份验证问题。这至少可以验证您的代码或您的帐户是否存在问题。 @Torchedmuffinz - 我浏览了我的 gmail 设置,发现我在“转发和 POP/IMAP”选项卡下启用了 POP 和 Imap。不确定这是否对允许我的代码发送电子邮件有任何影响。还可以尝试使用此链接accounts.google.com/DisplayUnlockCaptcha 允许访问应用程序 【参考方案1】:Gmail 端口 587 不支持 SSL。
我认为下面的代码应该适合你。
MailMessage msg = new MailMessage();
msg.From=new MailAddress("yourmail@gmail.com");
msg.To.Add("receiver@receiverdomain.com");
msg.Subject="Your Subject";
msg.Body="Message content is going to be here";
msg.IsBodyhtml=false; //if you are going to send an html content, you have to make this true
SmtpClient client = new SmtpClient("smtp.gmail.com");
client.Port=587;
NetworkCredential credential=new NetworkCredential("yourmail@gmail.com","your gmail password");
client.UseDefaultCredentials=false;
client.Credentials=credential;
client.Send(msg);
【讨论】:
【参考方案2】:可以在没有“允许安全性较低的应用”选项的情况下使用 Google SMTP 服务器,但您不能使用标准的 Google 用户名和密码。请参阅我在其他帖子中的说明:
Is there a way to use ASP.NET to send email through a Google Apps acccount without selecting the 'Allow less secure apps' option?
【讨论】:
以上是关于如何使用 Gmail 的 SMTP 客户端在 C# 中向自己发送电子邮件,而无需在 Gmail 设置中启用安全性较低的应用程序的访问权限?的主要内容,如果未能解决你的问题,请参考以下文章