【问题标题】:Sending Email using live/gmail smtp使用 live/gmail smtp 发送电子邮件
【发布时间】:2016-10-25 21:19:10
【问题描述】:

我正在使用 C# 使用 SMTP 和 gmail 服务器发送电子邮件。

以下是我用于发送电子邮件的代码。我遇到了一些错误,即

SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 Authentication Required。

    public static bool SendEmail(string from, string[] to, string[] cc, string[] bcc, string subject, string body, bool isBodyHtml, List<Attachment> attachmentList)
    {
        try
        {
            var mailMessage = new MailMessage();
            var smtpClient = new SmtpClient();

            mailMessage.From = new MailAddress(from);
            mailMessage.To.Add(new MailAddress(string.Join(",", to)));

            if (cc != null && cc.Any())
            {
                mailMessage.CC.Add(new MailAddress(string.Join(",", cc)));
            }

            if (bcc != null && bcc.Any())
            {
                mailMessage.Bcc.Add(new MailAddress(string.Join(",", bcc)));
            }

            mailMessage.Subject = subject;
            mailMessage.Body = body;
            mailMessage.IsBodyHtml = isBodyHtml;

            if (attachmentList != null)
            {
                foreach (var attachment in attachmentList)
                {
                    mailMessage.Attachments.Add(attachment);
                }
            }

            smtpClient.Host = "smtp.gmail.com";
            smtpClient.Port = 587; //465
            smtpClient.Credentials = new System.Net.NetworkCredential("username@email.com", "passsword");
            smtpClient.EnableSsl = true;
            smtpClient.Send(mailMessage);

            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }

我做错了什么以及如何使用 gmail 发送电子邮件。

【问题讨论】:

  • 您是否检查过凭据是否正确?
  • 是的,凭据是正确的。
  • 如果您提供特定的电子邮件地址和密码smtpClient.UseDefaultCredentials = false;,请将此行放入您的代码中
  • 对我来说,您的代码看起来不错,请尝试检查 Gmail 收件箱,您可能收到有关来自不安全应用或其他任何东西的注册尝试的邮件,如果您收到来自 gmail 的邮件,请按照说明更改设置根据它。
  • 发件人地址是否与登录地址相同?否则 gmail 可能会认为您正在尝试转发消息

标签: c# .net email smtp gmail


【解决方案1】:

您尚未将UseDefaultCredentials 设置为false,因此尽管您提供了凭据,但应用程序仍在尝试使用您的Windows 凭据登录SMTP。试试下面的:

smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential("username@email.com", "passsword");

UseDefaultCredentials 需要设置为false您设置新的网络凭据之前。

【讨论】:

  • UseDefaultCredentials 默认设置为 false。如果您确实想使用默认凭据,则必须手动将其设置为 true
  • @user1666620,非常感谢,这里的关键是 UseDefaltCredentials 的位置。
  • @Adwaenyth 如果UseDefaultCredentials 默认设置为false,则无需将其设置为false 即可使应用程序正常工作。我知道文档中另有说明,但这不是文档错误的第一次。 msdn.microsoft.com/en-us/library/…
  • @user1666620 很奇怪,因为Microsoft documentation 明确声明了其他内容。
  • @Adwaenyth 文档有误。如果您想使用 Windows 凭据以外的其他内容,则需要将 UseDefaultCredentials 显式设置为 false。当我编辑我的评论时,如果默认值为 false,那么这不会是我在使用 SmtpClient 时在 SO 上看到的最常见问题。随意编写应用程序来重现此行为。
【解决方案2】:

如果您确定您的用户名和密码正确并且您仍然收到错误,则表示 Gmail 已阻止您的应用程序。

尝试从这里开启它Grant Access to Less Secure Apps

【讨论】:

  • Gmail 的应用程序安全性较低。所以我检查了但仍然得到同样的错误:(
  • 致反对者,虽然这不是导致 OP 收到错误的原因,但如果未启用不太安全的应用程序,您将收到 OP 描述的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 2015-10-22
  • 2014-12-24
  • 2017-05-12
相关资源
最近更新 更多