如何使用 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 设置中启用安全性较低的应用程序的访问权限?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Gmail 使用 C# 发送电子邮件

使用 live/gmail smtp 发送电子邮件

使用gmail smtp c#发送电子邮件[重复]

使用 TLS 使用来自 DELPHI(Indy) 的 Gmail 传出 SMTP

使用 C# 通过 Gmail SMTP 服务器发送电子邮件

所有端口上通过 C# .Net 的 GMail SMTP 错误