Подтвердить что ты не робот

Не удается выполнить авторизацию в Gmail smtp через MailMessage & smtpClient

Я не могу понять, в чем заключается моя жизнь, почему это не работает.

SmtpClient smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    UseDefaultCredentials = false,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential("[email protected]", "myGmailPasswordHere"),
    EnableSsl = true,
    Timeout = 10000
};


smtp.Send(mail);

Я получаю:

Для SMTP-сервера требуется безопасное соединение, или клиент не прошел аутентификацию. Ответ сервера: 5.5.1 Требуется аутентификация.

Я только что указал EnableSsl на true, так что это не должно быть проблемой с точки зрения безопасного соединения.

Я запускаю это из localhost. И да, мое имя пользователя и пароль, которые я вводил в auth (мои учетные данные учетной записи gmail), на 100% правы.

4b9b3361

Ответ 1

Я знаю, что это старая тема, НО... Google что-то изменил в своих настройках безопасности.

Со всеми ответами боролся, пока я не проверил электронную почту с письмом от Google, заявив, что "мы недавно заблокировали попытку входа в вашу учетную запись Google".

Это привело меня к этой странице: Безопасность учетной записи Google

В разделе "Доступ к менее защищенным приложениям" вы можете включить доступ к своей учетной записи с других устройств/приложений... например, ваше приложение С#.

Обратите внимание, что больше нет раздела, специфичного для приложения.

Надеюсь, это поможет кому-то... Я просто потерял 30 минут своей жизни...

Ответ 2

Если информация о входе на 100% правильная, вам нужно установить UseDefaultCredentials = false first, а затем установить учетные данные, которые вы хотите использовать Credentials = new NetworkCredential("[email protected]", "myGmailPasswordHere").

Если вы сначала установили учетные данные, когда вы установите UseDefaultCredentials = false, это приведет к тому, что свойство Credentials будет null.

Это подключено, но это случилось со мной.

Отлаживайте свой код и проверяйте, имеет ли свойство Credentials значение null до вызова smtp.Send(message);. Если это так, попробуйте инвертировать порядок. Кажется, что у вас это в правильном порядке, но если оно нулевое, не используйте встроенную инициализацию.

Надеюсь, что это поможет.

EDIT: Если вы используете двухэтапную аутентификацию, убедитесь, что используете пароль для приложения

Ответ 3

Похоже, что для Gmail требуется пароль для конкретного приложения (а не ваш основной пароль).

Пожалуйста, посмотрите на это: http://support.google.com/mail/bin/answer.py?hl=en&answer=1173270

У меня была такая же проблема в последнее время.

Ответ 4

У меня была эта проблема до и исправлена, выполнив следующие шаги:

  • Перейдите к настройкам Моя учетная запись.
  • Выберите категорию Вход и безопасность.
  • Прокрутите вниз до раздела Связанные приложения и сайты.
  • отключите параметр Разрешить менее безопасные приложения.

Я просто отключил этот параметр, и мой код успешно работал.

Ответ 5

Это сработало для меня отлично...

SmtpClient smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        UseDefaultCredentials = false,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        Credentials = new NetworkCredential("[email protected]", "mypassword"),
        EnableSsl = true,
        Timeout = 10000
    };

    MailMessage message = new MailMessage();
    message.Body = "hello there";
    message.Subject = "hi!!";
    message.To.Add("[email protected]");
    message.From = new MailAddress("[email protected]");
    smtp.Send(message);

Ответ 6

<mailSettings>
            <smtp from="[email protected]">
                <network host="smtp.gmail.com" password="yourpassword" port="587" userName="username"/>
            </smtp>
</mailSettings>

Изменить: попробуйте добавить эту строку smtp.Credentials = Credentials после этого

Credentials = new NetworkCredential("[email protected]", "myGmailPasswordHere"),

Ответ 7

Сделайте обратный вызов следующим образом. Скажите System.Net, чтобы игнорировать ошибку!

Добавьте это до вызова Send()

ServicePointManager.ServerCertificateValidationCallback = 
    delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { return true; };

smtp.Send(mail);

Ответ 8

Имел ту же проблему, что и доступ к smtp.gmail.com из приложения ASP.NET, работающего на хостинге Amazon AWS. Оказалось, что моя конфигурация правильная - она ​​также отлично работает с другого компьютера, но gmail будет отклонять мою попытку входа в систему, потому что я пытаюсь войти в систему из необычного места. Я вошел в gmail через веб-интерфейс (www.gmail.com) и должен был ответить на капчу. После этого он работал.

Ответ 9

Моя проблема заключалась в том, что владелец домена для нашей учетной записи gmail отключил как "доступ для менее безопасных приложений", так и двухэтапную аутентификацию. Не было возможности включить его, я даже не мог увидеть настройку. Поэтому я тестировал свою личную учетную запись, и она работала нормально.

Ответ 10

Очень просто, просто следуйте этому примеру для приложения С# WPF:

       private void SendByGmail(string subject, string body, string recepientEmail, string MailMsgFrom, string MailMsgPass)
        {
            using (MailMessage mailMessage = new MailMessage())
            {
                mailMessage.From = new MailAddress(MailMsgFrom);
                mailMessage.Subject = subject;
                mailMessage.Body = body;
                mailMessage.IsBodyHtml = true;
                mailMessage.To.Add(new MailAddress(recepientEmail));
                mailMessage.Priority = System.Net.Mail.MailPriority.High;
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.gmail.com";
                smtp.EnableSsl = true;
                smtp.Timeout = 200000;
                System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
                NetworkCred.UserName = MailMsgFrom;
                NetworkCred.Password = MailMsgPass;
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = NetworkCred;
                smtp.Port = 587;
                smtp.Send(mailMessage);

            }
        }

После этого вы должны получить эту ошибку

smtpException   {"The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at"}   System.Net.Mail.SmtpException

Чтобы решить эту проблему, сначала войдите в свою учетную запись электронной почты на свою учетную запись google в веб-браузере. Затем просто следуйте по этой ссылке Активность аккаунта Google. Затем вы получите последние Устройства и активность своей учетной записи. Если показ блокирует текущую активность с вашего текущего устройства. Просто разблокируйте это. Затем повторите попытку отправки электронной почты.
Спасибо

Ответ 11

Для меня решение потребовало 2 "шагов":

  • установите UseDefaultCredentials = false сначала, затем установите учетные данные, которые я хочу использовать Credentials = new NetworkCredential("[email protected]", "myGmailPasswordHere"). Сначала установите учетные данные, когда я установил UseDefaultCredentials = false, создав свойство Credentials null.
  • Разрешить менее безопасные приложения в моем профиле Google.