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


260

Я использую следующий код для отправки электронной почты. Код работает правильно на моей локальной машине. Но на производственном сервере я получаю сообщение об ошибке

var fromAddress = new MailAddress("mymailid@gmail.com");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("yourmailid@yourdoamain.com");

string subject = "subject";
string body = "body";

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)       
};

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})

smtp.Send(message);

И на моем Gmail A / C я получил следующее письмо после того, как я запустил код с рабочего сервера

Здравствуй ,

Кто-то недавно использовал ваш пароль, чтобы попытаться войти в вашу учетную запись Google mymailid@gmail.com. Этот человек использовал приложение, такое как электронная почта, клиент или мобильное устройство.

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

Пятница, 3 января 2014 г. 13:56:08:00 UTC IP-адрес: xxx.xx.xx.xxx (abcd.net.) Расположение: Филадельфия, Пенсильвания, Филадельфия, Пенсильвания, США.

Если вы не распознаете эту попытку входа, возможно, кто-то другой пытается получить доступ к вашей учетной записи. Вы должны войти в свою учетную запись и немедленно сбросить пароль.

Сброс пароля

Если это был вы, и у вас возникли проблемы с доступом к учетной записи, выполните действия по устранению неполадок, перечисленные на странице http://support.google.com/mail?p=client_login.

С уважением, команда Аккаунтов Google


у вас есть доступ к производственному серверу
Arshad

У меня нет доступа к производственному серверу
vcs

Отключите двухэтапную проверку.
Мангеш,

Пожалуйста, посмотрите на stackoverflow.com/questions/34851484/...

1
Кроме того, убедитесь, что Google Captcha отключен - это может быть необходимо, если вы запускаете скрипт на удаленном сервере (необязательно при запуске на локальном компьютере): account.google.com/DisplayUnlockCaptcha
Jens

Ответы:


197

Обычно это происходит при попытке входа в систему из другого часового пояса или компьютера с IP-адресом. Ваш рабочий сервер и используемый вами почтовый идентификатор находятся в разных часовых поясах. Выберите одно из этих двух решений:

1) Войдите на рабочий сервер через удаленный доступ и войдите в Gmail, указав свои учетные данные. Они попросят подтверждение, подтвердят его и выйдут.

Или 2) войдите в Gmail на свой локальный компьютер, перейдите по этой ссылке, выберите обзор этой активности и выполните соответствующие действия.


21
Небольшой комментарий: перейдите на security.google.com/settings/security/activity, и здесь вы увидите заблокированное соединение со своим кодом. Разрешите им, и это должно помочь в этом случае.
Алексей Жуковский

68
Это также очень поможет: google.com/settings/security/lesssecureapps
Джордж,

Да, причина в том, что для учетной записи Gmail включено 2 этапа проверки. Выберите приложение / устройство и нажмите кнопку «Создать» support.google.com/accounts/answer/185833
15:15


8
Кроме того, убедитесь, что Google Captcha отключен - это может быть необходимо, если вы запускаете скрипт на удаленном сервере (необязательно при запуске на локальном компьютере): account.google.com/DisplayUnlockCaptcha
Jens

301

При попытке отправить почту из кода и обнаружении ошибки «SMTP-серверу требуется безопасное соединение или клиент не прошел проверку подлинности. Ответ сервера был: 5.5.1 Требуется проверка подлинности», то ошибка может возникнуть из-за следующих случаев.

случай 1: когда пароль неверный

Случай 2: когда вы пытаетесь войти из какого-либо приложения

случай 3: когда вы пытаетесь войти из домена, отличного от вашего часового пояса / домена / компьютера (это имеет место в большинстве случаев при отправке почты из кода)

Есть решение для каждого

Решение для случая 1: введите правильный пароль.

Решение 1 для случая 2 : перейдите в настройки безопасности по следующей ссылке https://www.google.com/settings/security/lesssecureapps и включите менее безопасные приложения. Так что вы сможете войти из всех приложений.

Решение 2 для случая 2 : (см. https://stackoverflow.com/a/9572958/52277 ) включить двухфакторную аутентификацию (или двухэтапную проверку), а затем сгенерировать пароль для конкретного приложения. Используйте этот новый пароль для аутентификации через SMTP.

Решение 1 для случая 3: (Это может быть полезно), вам нужно проверить действие. но проверка активности не будет полезна из-за последних стандартов безопасности, ссылка не будет полезна. Так что попробуйте следующий случай.

Решение 2 для случая 3 : Если вы разместили свой код где-то на рабочем сервере и если у вас есть доступ к производственному серверу, тогда подключитесь к производственному серверу с помощью удаленного рабочего стола и попробуйте один раз войти в систему из браузера рабочего сервера. Это добавит исключение для входа в Google, и вам будет разрешено войти из кода.

Но что, если у вас нет доступа к производственному серверу. попробуйте решение 3

Решение 3 для случая 3: Вы должны включить логин из другого часового пояса / ip для вашей учетной записи Google.

Для этого перейдите по ссылке https://g.co/allowaccess и разрешите доступ, нажав кнопку «Продолжить».

И это все. Ну вот. Теперь вы сможете войти с любого компьютера и любого приложения в свою учетную запись Google.


10
Решение 2! Вы маленькая красавица!
Джордж Харнуэлл

2
Помогла ссылка lesssecureapps выше :)
Гаутам Джайн

Вау, это должно быть помечено как принятый ответ. Спасибо.
Nic

5
сайт, размещенный на Azure, должен следовать решению 3 для случая 3: окончательная ссылка, которая поможет g.co/allowaccess
Рави Ананд

1
Решение 2 для случая 3 - сработало для меня. Спасибо.
ss_mj

106

Это проблема безопасности, Gmail по умолчанию блокирует доступ к вашей учетной записи электронной почты из пользовательских приложений. Вы можете настроить его, чтобы принять логин из вашего приложения.

После входа в свою электронную почту, нажмите здесь

Это приведет вас к следующей странице

Страница менее безопасных приложений


1
Кроме того, если у вас есть собственный домен, администратор домена должен сначала разрешить пользователям доступ к менее защищенным приложениям. Если вы являетесь администратором домена, перейдите по следующей ссылке, чтобы включить этот admin.google.com/AdminHome#ServiceSettings/…
user551113

2
Этот ответ великолепен. Работает как часы. Спасибо.
Thomas.Benz

24

Потратив пару часов сегодня, пытаясь найти здесь каждое решение, я все еще не смог обойти эту точную ошибку. Я использовал Gmail много раз таким образом, поэтому я знал, что это было что-то глупое, но я ничего не сделал, чтобы решить проблему. Я наконец наткнулся на решение в моем случае, поэтому думал, что поделюсь.

Во-первых, большинство из приведенных выше ответов также являются обязательными, но в моем случае это был простой вопрос упорядочения кода при создании SmtpClientкласса.

В этом первом фрагменте кода ниже обратите внимание, где находится Credentials = credsстрока. Эта реализация сгенерирует ошибку, указанную в этом вопросе, даже если все остальное настроено правильно.

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    Credentials = creds,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}

Однако если переместить вызов установщика учетных данных вниз, электронное письмо будет отправлено без ошибок. Я не внес никаких изменений в окружающий код ... т.е. ... имя пользователя / пароль и т. Д. Ясно, что либо EnableSSL, UseDefaultCredentials, or the DeliveryMethodзависит от того, Credentialsчто было установлено первым ... Я не проверял все, чтобы выяснить, какой это был хотя ,

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    Credentials = creds
}

Надеюсь, что это поможет спасти кого-то еще от некоторых головных болей в будущем.


2
В моем случае у меня была та же проблема, что и у вас, переупорядочить код так, чтобы учетные данные пришли в последний раз, работал для меня.
Dev

1
Я не могу в это поверить, но это сработало! Я включил двухэтапный, потому что не хотел включать менее безопасный флаг, но пока я не поставил Credential последним перед Send, он не хотел работать. Невероятно!
Чикич Ненад

6
Вопрос заключается в том , что в UseDefaultCredentialsинкубаторе есть этот код: this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;который переопределяет credentialsустанавливается Credentialsсеттера. Для меня это выглядит как SmtpClientошибка
Томаш Мадейский

@ TomaszMadeyski это должен быть ответ, а не комментарий! это моя проблема ... как, черт возьми, я могу думать, что, если я устанавливаю учетные данные в конструкторе, а затем снова присваиваю ложное значение UseDefaultCredentials = false, это отменяет учетные данные ... сумасшедший !! но это происходит .... спасибо youuuuu
FabianSilva


12

Привет, у меня была такая же проблема,

что я сделал, чтобы решить это. это включить менее безопасное приложение. после подключения к моей учетной записи Gmail. Я ввел эту ссылку: https://www.google.com/settings/security/lesssecureapps

Затем я включаю безопасное приложение и оно работает. это было сказано также выше


Так в чем же разница, чем ваш ответ на вышеуказанный ответ? Тот же ответ дан перед вами 12 января 15 года в 10:36.
Душа

11

У меня есть ранее работающий код, который выдает эту ошибку сейчас. Нет проблем с паролем. Нет необходимости конвертировать сообщения в base64. Оказывается, мне нужно сделать следующее:

  1. Отключить двухфакторную аутентификацию
  2. Установите для параметра «Разрешить менее безопасные приложения» значение ВКЛ.
  3. Войдите в свою учетную запись Gmail с рабочего сервера
  4. Зайдите сюда, чтобы подтвердить активность входа
  5. Запустите ваше приложение на рабочем сервере

Рабочий код

    public static void SendEmail(string emailTo, string subject, string body)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("youremail@gmail.com", "secretpassword"),
            EnableSsl = true
        };

        client.Send("youremail@gmail.com", emailTo, subject, body);
    }

Отключение двухфакторной аутентификации Отключение двухфакторной аутентификации

Установите «Разрешить менее безопасные приложения» в положение «ВКЛ» (на той же странице необходимо прокрутить вниз) Разрешить менее безопасные приложения


9

Просто следуйте инструкциям в электронной почте Google и включите менее безопасные приложения.


6

Я столкнулся с той же проблемой. Это происходит, когда вы включаете 2-этапную проверку (MFA). Просто отключите двухэтапную проверку, и ваша проблема должна быть решена.


У меня не было двухшагового включения для этой учетной записи, и у меня была эта проблема.
Шив

4

Ниже приведен мой код. У меня также была та же ошибка, но проблема заключалась в том, что я неправильно указал свой пароль. Приведенный ниже код будет работать отлично .. попробуйте

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");             
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";
            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";
            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";
            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;
            SmtpServer.Send(mail);

Вы можете сослаться на это в моем блоге


Я использую тот же код, который работает на моей локальной машине, но не работает на сервере. Получение ошибки SMTP-сервер требует безопасного соединения или клиент не прошел проверку подлинности. Ответ сервера: 5.5.1 Требуется аутентификация. ,
Акшай Чавла

1
я связался с моим хостинг-провайдером, они сказали: « Мы можем видеть, что вы настроили SMTP третьей части (smtp.gmail.com), который не будет поддерживаться в нашей среде общих серверов. Из-за чрезмерного злоупотребления почтовой функцией или проблемы со спамом почтовая функция не поддерживается. Вы можете отправлять электронную почту с помощью PHPMailer, который очень популярен и часто используется. но мой сайт построен в MVC C #, так как я могу использовать phpmailer?
Акшай Чавла


2

У меня была такая же проблема для приложения, развернутого в Microsoft Azure.

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

Сначала я одобрил все неизвестные устройства (некоторые ip-адреса из Ирландии) на следующей странице (вошел в систему как пользователь gmail): https://security.google.com/settings/u/1/security/secureaccount

Я использовал следующие настройки для клиента:

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("my_user_name@gmail.com", "my_password"); 

Он начал работать только после того, как я установил следующее свойство на smtp-клиенте:

client.TargetName = "STARTTLS/smtp.gmail.com";

2

Что мне помогло, так это активировать опцию для менее безопасных приложений (я использую VB.NET)

Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
        Dim mail As New MailMessage()
        Dim SmtpServer As New SmtpClient("smtp.gmail.com")
        mail.From = New MailAddress("from@gmail.com")
        mail.[To].Add("to@gmail.com")
        mail.Subject = "subject"
        mail.Body = body
        Dim attachment As System.Net.Mail.Attachment
        attachment = New System.Net.Mail.Attachment(file_location)
        mail.Attachments.Add(attachment)
        SmtpServer.Port = 587
        SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
        SmtpServer.EnableSsl = True
        SmtpServer.Send(mail)
    End Sub

Войдите в свою учетную запись и перейдите на страницу google.com/settings/security/lesssecureapps.


2

Комментарий Томаша Мадейского - это то, что исправило мою проблему ... он говорит, что существует ошибка в SetDefaultCredential, он говорит:

«Проблема в том, что в установщике UseDefaultCredentials есть этот код: this.transport.Credentials = value? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null; который переопределяет учетные данные, установленные установщиком Credentials. Для меня это выглядит как ошибка« SmtClient »

если вы поставите smtpClient.UseDefaultCredentials = falseпосле набора учетных данных ... эта строка установлена ​​для обнуления этих учетных данных ...


2

НОЯБРЬ 2018, перепробовал все вышеперечисленное безуспешно.

Ниже приведено решение, которое сработало окончательно. К сожалению, он не использует SSL, но работает !!!

var fromAddress = new MailAddress(asd@asd.com, "From Name");
var toAddress = new MailAddress("tosend@asd.com", "To Name");

const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "aspmx.l.google.com",
    Port = 25,
    EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

1

Я попробовал все предложения, найденные здесь, от включения менее безопасных приложений до пробного порта 587 ... ничего не получалось. Наконец я только что закомментировал строку UseDefaultCredentials = false. Все работало, если я не трогал это логическое значение.


1
то же самое здесь ... я не могу поверить, что одна строка заняла у меня час!
Вахид Масуд

0

Я действительно посмотрел на множество идей, единственное решение было таким (работает с различными провайдерами электронной почты):

            try
        {
            ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
            string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
            int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString());  //587
            string[] email = von1.Split('@');
            string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
            string password = layer.getUserPassword(listSender.SelectedValue.ToString());
            SmtpClient client = new SmtpClient(host, port);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            //A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
            //System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
            //System.Net.CredentialCache cache = new System.Net.CredentialCache();
            //cache.Add(host, port, "NTLM", myCreds);
            ///cache.GetCredential(host, port, "NTLM");   //NTLM
            client.Credentials = new System.Net.NetworkCredential(userName, password);
            client.Host = host;
            client.Port = port;
            client.EnableSsl = true;
            client.Send(message);
            ViewProgressbar();
        }
        catch (SmtpException ex)...

0

Я являюсь подписчиком приложений Google для бизнеса и последние пару часов провожу с этим, даже имея все правильные настройки (smtp, port, enableSSL и т. Д.). Вот что сработало для меня и веб-сайтов, которые выдавали ошибку 5.5.1 при попытке отправить электронное письмо:

  1. Войдите в свой admin.google.com
  2. Нажмите БЕЗОПАСНОСТЬ <- если его не видно, нажмите «БОЛЬШЕ КОНТРОЛЯ» и добавьте его из списка.
  3. Нажмите Основные настройки
  4. Прокрутите до конца поля «Основные параметры» и нажмите ссылку «Перейти к настройкам для менее безопасных приложений».
  5. Выберите опцию № 3: Обеспечить доступ к менее защищенным приложениям для всех пользователей (не рекомендуется)
  6. Нажмите СОХРАНИТЬ внизу окна

После этого мои почтовые формы с сайта снова работали. Удачи!


0

Возможно, вам придется создать / сгенерировать определенный пароль APP из Gmail. Ваше приложение или скрипт будет использовать этот новый пароль вместо вашего обычного пароля. Ваш обычный пароль все равно будет работать для вас.

Вот что сделал для меня. Я все еще использовал ту же учетную запись электронной почты, но мне пришлось создать новый пароль для конкретного приложения.

https://support.google.com/accounts/answer/185833?hl=en

Скриншот

В основном вы можете сделать это здесь: https://security.google.com/settings/security/apppasswords


0

Если вы используете Gmail.

  • 1 вход в вашу учетную запись

    2- просмотрите это ссылку

    3- Разрешить менее безопасные приложения: ВКЛ

Наслаждаться....



0

не ставить точку останова перед ожиданием smtp.SendMailAsync (mail);

:)

когда он ждет с точкой останова, выдающей эту ошибку, когда я удаляю точку останова, она сработала


-1

Я использовал все вышеупомянутые решения, но в конце концов он заработал только после того, как я включил IMAP-доступ из настроек Gmail. Ссылка для включения IMAP-доступа в настройках Gmail.

Конечно, баллы в других решениях тоже требовались.


Это не помогло мне. Включение IMAP просто позволяет читать сообщения электронной почты Gmail от других почтовых клиентов, таких как Outlook, Thunderbird.
Кимбауди

-5

попробуйте изменить хост, это новый, я получил эту настройку Mozilla Thunderbird

Host = "smtp.googlemail.com"

это работа для меня

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.