【问题标题】: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?如何使用 Gmail 的 SMTP 客户端在 C# 中向自己发送电子邮件,而无需在 Gmail 设置中启用安全性较低的应用程序的访问权限?
【发布时间】: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 允许访问应用程序

标签: c# asp.net email gmail


【解决方案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?

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 2022-06-11
      • 2020-02-24
      • 2014-01-19
      • 2013-03-10
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      相关资源
      最近更新 更多