Не удается авторизоваться в Gmail SMTP через MailMessage & smtpClient - PullRequest
19 голосов
/ 02 февраля 2012

Я не могу понять, почему это не работает

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


smtp.Send(mail);

Я получаю:

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

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

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

Ответы [ 11 ]

39 голосов
/ 21 августа 2014

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

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

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

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

Обратите внимание, что раздел «приложения» больше не существует.

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

21 голосов
/ 17 июля 2012

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

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

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

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

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

РЕДАКТИРОВАТЬ: Если выиспользуя двухэтапную проверку, убедитесь, что вы используете пароль для конкретного приложения

11 голосов
/ 02 февраля 2012

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

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

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

3 голосов
/ 25 февраля 2016

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

  1. Перейдите в настройки " Моя учетная запись ".
  2. Выберите категорию « Вход и безопасность ».
  3. Прокрутите вниз до « Подключенные приложения и сайты »section.
  4. отключите опцию « Разрешить менее безопасные приложения ».

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

2 голосов
/ 02 февраля 2012

Это сработало очень хорошо для меня

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

    MailMessage message = new MailMessage();
    message.Body = "hello there";
    message.Subject = "hi!!";
    message.To.Add("myid@gmail.com");
    message.From = new MailAddress("myid@gmail.com");
    smtp.Send(message);
1 голос
/ 20 апреля 2017

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

  • сначала установите UseDefaultCredentials = false, затем установите учетные данные, которые я хочу использовать Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"). При первой установке учетных данных, когда я установлю UseDefaultCredentials = false, свойство Credentials сделает null.
  • Разрешить менее безопасные приложения в моем профиле Google.
0 голосов
/ 13 апреля 2015

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

       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 . Тогда вы получите последние устройства и активность в вашей учетной записи. Если шоу заблокировать вашу текущую активность с вашего текущего устройства. Просто разблокируй это. Затем попробуйте снова отправить письмо.
Спасибо

0 голосов
/ 10 сентября 2014

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

0 голосов
/ 02 марта 2013

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

0 голосов
/ 02 февраля 2012

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

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

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

smtp.Send(mail);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...