Помилка 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 годин UTC IP-адреса: xxx.xx.xx.xxx (abcd.net.) Місцезнаходження: Філадельфія, штат Філадельфія, штат Пенсільванія, США

Якщо ви не розпізнаєте цю спробу входу, хтось інший може спробувати отримати доступ до вашого облікового запису. Ви повинні увійти до свого облікового запису та негайно відновити пароль.

Скинути пароль

Якщо це були ви та у вас виникли проблеми з доступом до свого облікового запису, виконайте кроки з усунення несправностей, перелічені на веб-сторінці http://support.google.com/mail?p=client_login

З повагою, команда облікових записів Google


чи є у вас доступ до виробничого сервера
Аршад

У мене немає доступу до виробничого сервера
vcs

Вимкніть двоетапну перевірку ..
Mangesh

Будь ласка, подивіться на stackoverflow.com/questions/34851484 / ...

1
Крім того , переконайтеся , що Google «Захисний код» відключений - це може бути необхідно , якщо ви запускаєте скрипт на віддаленому сервері (немає необхідності при роботі на локальному комп'ютері): accounts.google.com/DisplayUnlockCaptcha
Jens

Відповіді:


197

Зазвичай це відбувається при спробі входу з іншого часового поясу або ІР-комп'ютера. Ваш виробничий сервер та ідентифікатор пошти, які ви використовували, знаходяться в різних часових поясах. Виберіть будь-яке з цих двох рішень:

1) Увійдіть на виробничий сервер за допомогою віддаленого доступу та ввійдіть в gmail один раз за допомогою своїх облікових даних. Вони попросять підтвердження, підтвердять його та вийдуть із системи.

Або 2) увійдіть в gmail на своєму локальному комп’ютері, перейдіть за цим посиланням та виберіть перегляд цієї діяльності та вживайте належних дій.


21
Невеликий коментар: перейдіть на сторінку security.google.com/settings/security/activity і тут ви побачите заблоковане з'єднання зі свого коду. Дозвольте їм, і це повинно допомогти в цьому випадку.
Олексій Жуковський

68
Це також дуже допоможе: google.com/settings/security/lesssecureapps
Джордж

Так, причина - увімкнено перевірку на два кроки для облікового запису gmail. Виберіть додаток / пристрій і натисніть кнопку Створити кнопку support.google.com/accounts/answer/185833
smily


8
Крім того , переконайтеся , що Google «Захисний код» відключений - це може бути необхідно , якщо ви запускаєте скрипт на віддаленому сервері (немає необхідності при роботі на локальному комп'ютері): accounts.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 посилання вище допомогло :)
Gautam Jain

Ого, це слід позначити як прийняту відповідь. Дякую.
Нік

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
У моєму випадку у мене була така ж проблема, як і у вас, переупорядкувавши код, щоб останній раз прийшов Credentials працював на мене.
Дев

1
Я не можу повірити, але це спрацювало! Я ввімкнув двоетапну програму, тому що не хотів увімкнути менш захищений прапор, але поки я не поставив Credential останньою перед відправкою, він не хотів працювати. Неймовірно!
Чикич Ненад

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

Я зіткнувся з тією ж проблемою. Це відбувається, коли ви вмикаєте двоетапну перевірку (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 Потрібна автентифікація. .
Akshay Chawla

1
Я зв’язався зі своїм провайдером хостингу, і вони сказали: Ми могли бачити, що ви налаштували третю частину SMTP (smtp.gmail.com), яка не підтримуватиме в нашому спільному серверному середовищі. Через надмірне зловживання функцією пошти або проблему спаму, функція пошти не підтримується. Ви можете відправляти електронну пошту за допомогою PHPMailer, який дуже популярний і часто використовується. але мій сайт побудований у mvc c #, тож як я можу використовувати phpmailer?
Акшай Чаула

3

просто увімкніть налаштування або gmail. дивіться нижче дане зображення:

введіть тут опис зображення


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, він каже:

"Проблема полягає в тому, що в Setter UseDefaultCredentials є цей код: this.transport.Credentials = значення? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null; який переосмислює облікові дані, встановлені Credentials setter. Для мене це виглядає, як міг виглядати, як це міг.

якщо ви поставите 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, порт, enableSSL тощо). Ось що працювало для мене та веб-сайти, які видавали помилку 5.5.1 при спробі надіслати електронний лист:

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

Після цього мої форми електронної пошти з веб-сайту знову працювали. Удачі!


0

Вам може знадобитися створити / генерувати певний пароль додатка з gmail. ви додаток або сценарій використовуватиме цей новий пароль замість звичайного пароля. Ваш звичайний пароль все одно буде працювати для вас.

Саме це зробило це для мене. Я все ще використовував той самий обліковий запис електронної пошти, але мені довелося створити новий пароль конкретного додатка.

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

Екран постріл

В основному це можна зробити тут: https://security.google.com/settings/security/apppasswords


0

Якщо ви використовуєте gmail.

  • 1-вхід у ваш рахунок

    2- перегляньте це посилання

    3- Дозволити менш захищені програми: Увімкнено

Насолоджуйтесь ....



0

не ставити перерву перед тим, як чекати smtp.SendMailAsync (пошта);

:)

коли він чекає з точкою розриву, даючи цю помилку, коли я видаляю точку розриву, вона спрацювала


-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.