【问题标题】:SMTP authentication using GMAIL, error 5.5.1使用 GMAIL 的 SMTP 身份验证,错误 5.5.1
【发布时间】:2015-12-31 09:21:24
【问题描述】:

当我尝试在 C# 中使用 SMTPMailMessage 时遇到了一些麻烦:

这是我第一次使用 SMTPMailMessage,所以,有些行可能是错误的,但这是我迄今为止所做的我需要你们的帮助。

我已经搜索了很多关于它的东西,也在 stackoverflow 上搜索了很多东西,但到目前为止,我想不出我做错了什么。当我尝试运行 (模式调试和正常运行) 我的 Application Console (只是在控制台上测试,非常简单) 它给了我这个error

SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 需要身份验证。了解更多信息,请访问

我在Visual Studio 2013上理解了下面的错误,问题是我不太了解Smtp类的属性和方法,MailMessage,然后它让我不明白我在代码上做错了什么,

下面是我的控制台应用程序上的class Email

    /// <summary>
    /// Email Server
    /// </summary>
    protected SmtpClient SmtpClient { get; set; }

    /// <summary>
    /// Message Content
    /// </summary>
    protected MailMessage MailMessage { get; set; }
    #endregion 

   /// <summary>
   /// Método enviar e-mail
   /// </summary>
   /// <param name="smtp"></param>
   /// <param name="from"></param>
   /// <param name="to"></param>
   /// <param name="subject"></param>
   /// <param name="body"></param>
   /// <param name="priority"></param>
    public string EnviarEmail(string smtp, string from, string to, string subject, string body, bool priority)
    {
        try
        {
            SmtpClient = new SmtpClient();
            SmtpClient.Host = "smtp.gmail.com";
            SmtpClient.Port = 587;
            SmtpClient.EnableSsl = true;
            SmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            SmtpClient.Credentials = new NetworkCredential("raffa.ferreiira@gmail.com","mypassword");
            SmtpClient.UseDefaultCredentials = true;

            MailMessage = new MailMessage();
            MailMessage.From = new MailAddress(from, "Raffa Ferreira", Encoding.UTF8);
            MailMessage.To.Add(new MailAddress(to, "Fulano teste", Encoding.UTF8));

            MailMessage.Subject = subject;
            MailMessage.Body = body;
            MailMessage.BodyEncoding = Encoding.UTF8;
            MailMessage.BodyEncoding = Encoding.GetEncoding("ISO-8859-1");

            if (priority == false)
            {
                MailMessage.Priority = MailPriority.Normal;
            }
            else
            {
                MailMessage.Priority = MailPriority.High;
            }

            SmtpClient.Send(MailMessage);
        }
        catch(SmtpFailedRecipientException ex)
        {
            Console.WriteLine("Mensagem : {0} " + ex.Message);
        }
        catch(SmtpException ex)
        {
            Console.WriteLine("Mensagem SMPT Fail : {0} " + ex.Message);
        }
        catch(Exception ex)
        {
            Console.WriteLine("Mensagem Exception : {0} " + ex.Message);
        }

        string mensagem = "E-mail enviado";
        return mensagem;
    }

Program 上,我将其称为 class Email,并传递一些参数:

class Program
{
    static void Main(string[] args)
    {
        string smtp = "smtp.live.com";
        string from = "raffa.ferreiira@gmail.com";
        string to = "raffa.ferreiira@live.com";
        string subject = "COMMUNICATE";
        string body = "Hello, this is a text of a test message for you"

        Email email1 = new Email();
        email1.EnviarEmail(smtp, from, to, subject, body, true);

    }
}

我只是在stackoverflow 上四处询问,因为我无法再搜索我的一些疑问的答案,所以我需要帮助。因为这是我第一次使用 SMTPMailMessage....!

为什么会出现这个错误?代码有问题吗?它是什么?

【问题讨论】:

标签: c# email smtp smtpclient mailmessage


【解决方案1】:

尝试将UseDefaultCredentials 设置为false

来自MSDN article

“如果服务器请求此 SmtpClient 对象应使用当前登录用户的默认凭据进行身份验证,请将此属性设置为 true。”

...

“如果 UseDefaultCredentials 属性设置为 false,则将使用 Credentials 属性中设置的值”

【讨论】:

    【解决方案2】:

    我刚刚解决了这个问题。在 google 登录和安全中,将“允许不安全的应用程序”选项设置为 true。

    【讨论】:

      猜你喜欢
      • 2017-06-22
      • 2015-07-23
      • 1970-01-01
      • 2020-02-25
      • 2018-06-23
      • 2015-11-05
      • 2018-09-28
      • 2019-01-03
      • 2013-02-06
      相关资源
      最近更新 更多