Сервер SMTP вимагає безпечного з'єднання або клієнт не був автентифікований. Відповідь сервера була: 5.5.1 Потрібна автентифікація?


110

Я хочу надіслати електронну пошту зі своєї заявки, і я написав наступний код для надсилання пошти

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("mymailid");
    msg.To.Add("receipientid");
    msg.Subject = "test";
    msg.Body = "Test Content";
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.UseDefaultCredentials = true;

    client.Send(msg);

Я запускаю його на localhost, тому яку помилку я роблю, щоб надіслати його.

Коли я надсилаю кнопку, вона видає помилку

Сервер SMTP вимагає безпечного з'єднання або клієнт не був автентифікований. Відповідь сервера була: 5.5.1 Потрібна автентифікація.

Код у файлі Web.config

 <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />   
    <add key="smtpServer" value="smtp.gmail.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="sender@gmail.com" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="sender@gmail.com" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="sender@gmail.com">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="sender@gmail.com"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

що мені робити, щоб вирішити цю помилку та надіслати пошту ??



Я думаю , що ви , можливо , доведеться шукати , щоб ця відповідь теж: stackoverflow.com/a/9572958/1136253
mrbengi

У мене була така ж проблема. перевірити [цю публікацію] [1] [1]: stackoverflow.com/a/20186909/709340
Мусульманська Хаді

Вам слід розглянути можливість конфігурації даних конфігурації SMTP у файлі config та не перезаписувати їх у коді - див. Дані конфігурації SMTP за адресою systemnetmail.com/faq/4.1.aspx
Michael Freidgeim

Відповіді:


62

Спершу перевірте, чи немає проблем, пов’язаних із безпекою служби Gmail. Можливо, ви ввімкнули подвійну автентифікацію в gmail. Також перевірте свою поштову скриньку, якщо ви отримуєте будь-які сповіщення про безпеку. У таких випадках перевірте іншу відповідь @mjb, як показано нижче

Нижче дуже загальне, що я завжди спочатку перевіряю на наявність таких питань

client.UseDefaultCredentials = true;

встановіть його на значення false.

Примітка @Joe King відповідь - ви повинні встановити client.UseDefaultCredentials перед тим, як встановити client.Credentials


2
У такому випадку вам слід поділитися кодом. Вище відповідь - про код, про який йдеться
Ronak Patel

7
Примітка відповіді @Joe King - ви повинні встановити client.UseDefaultCredentials перед тим, як встановити client.Credentials
Aaron

1
Ця відповідь не спрацює, я думаю, що більшість людей зіткнулися з безпекою на стороні gmail. дивіться відповідь mjb для правильного рішення
Джеррі Лян

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

3
Встановлення client.UseDefaultCredentials = false; перед client.Credentials and setting client.EnableSsl = true; зробив трюк у моєму випадку.
Укладається

139

У мене така ж проблема.

Я знайшов таке рішення:

Google може заблокувати спроби входу з деяких програм або пристроїв, які не використовують сучасні стандарти безпеки. Оскільки такі програми та пристрої простіше втручатися, їх блокування допомагає зберегти ваш обліковий запис безпечнішим.

Деякі приклади програм, які не підтримують останні стандарти безпеки, включають:

  • Додаток Пошта на вашому iPhone або iPad з iOS 6 або нижче
  • Додаток Mail на вашому телефоні Windows, що передує випуску 8.1
  • Деякі настільні клієнти настільних ПК, такі як Microsoft Outlook та Mozilla Thunderbird

Тому ви повинні ввімкнути Менш безпечний вхід (або Менш безпечний доступ до додатків ) у своєму обліковому записі Google.

Після входу в обліковий запис google перейдіть до:

https://www.google.com/settings/security/lesssecureapps
або
https://myaccount.google.com/lesssecureapps

У C # ви можете використовувати такий код:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("email@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Інформація, якою поділився Майкл Фрейджім у нижній частині коментарів:
Аналогічна відповідь із скріншотами https://stackoverflow.com/a/32457468/52277


1
Це разом із забезпеченням включення SSL у коді творить чудеса, велике спасибі
Crouch

1
Чим ви @mjb для того, щоб поділитися відповіддю. Це рятує моє життя :)
Mayeed

3
це повинна бути обрана відповідь
thatOneGuy

2
Це було моїм питанням, дякую за те, що пережили неприємності та дали більш пояснювальну відповідь.
Боян

Працював і для мене. Дякуємо @mjb
Rajbir Jawanda

44

Переконайтеся, що ви встановили SmtpClient.Credentials після дзвінка SmtpClient.UseDefaultCredentials = false.

Порядок важливий, оскільки налаштування SmtpClient.UseDefaultCredentials = falseбуде скинуто SmtpClient.Credentialsна нуль.


2
Я шукав рішення цього протягом півгодини, ваш - це єдиний маленький пост в Інтернеті, який я виявив, що згадує про замовлення цього. Дякую, друже.

4
@Joe King Ви просто чудовий товариш ..... шукав цього з 3 годин :)
Джатін

1
Дякую @Joe King, що важлива інформація відсутня в документах MS. Це було вирішенням моєї проблеми з надсиланням також імені користувача та пароля.
Аарон

1
Це легко не помітити, але замовлення важливо, як я щойно дізнався.
GatesReign

1
так. врятував мені день. перед тим, як встановити Credentials, вам потрібно зателефонувати UseDefaultCredentials = false.
Рендел

33

Я годинами шукав і пробував різні речі. Щоб підсумувати, мені довелося враховувати наступні моменти:

  1. Використовуйте smtp.gmail.comзамістьsmtp.google.com
  2. Використовуйте порт 587
  3. Встановити client.UseDefaultCredentials = false;перед встановленням облікових даних
  4. Увімкніть доступ для менш захищених програм
  5. Встановити client.EnableSsl = true;

Якщо ці кроки не допомогли, перевірте цю відповідь .
Можливо, ви можете знайти щось корисне і на цьому поширеному питанні System.Net.Mail .


1
Ця відповідь дуже корисна ... вирішила мою проблему. Велике спасибі
Харі

1
якщо це все ще не працює, перейдіть за цим посиланням g.co/allowaccess і дозвольте доступ
Portekoi

1
"Доступ для менш захищених додатків" врятував мені день.
Роміль Кумар Джайн

1
Ця частина зробила це для мене: "Увімкніть доступ для менш захищених програм". Дякую!
Тадей

11

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


Найкраща відповідь справді! Я знову увійшов у систему, і це спрацювало! PS: Мені довелося надати капчу в Google
Bellash

Я отримав цю помилку, оскільки мій обліковий запис Google захищено двофакторною автентифікацією. Я закінчив створити спеціальний обліковий запис, з якого надсилати електронний лист.
MvdD

8

Спробуйте так, я лише змінив кілька змін:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("mymailid@gmail.com");
msg.To.Add("receipientid@gmail.com");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;


using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("mymailid@gmail.com", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

Також, будь ласка, покажіть файл app.config, якщо у вас є налаштування пошти.


Я в ньому ще не налаштований. що мені там писати?
Абхай Андхарія

у моєму додатку mvc немає файлу app.config.
Абхай Андхарія

Я спробував багато інших рішень, але тільки це спрацювало. Спасибі
Аділ Малик


3

Я зіткнувся з тією самою проблемою, навіть якщо я встановив "UseDefaultCredentials" значення false. Пізніше я виявив, що першопричиною є те, що я ввімкнув "двоетапну перевірку" у своєму акаунті. Після того, як я його вимкнув, проблема відпадає.


4
Не вимикайте двоетапну перевірку. Там є причина. Ви можете генерувати пароль для програми в налаштуваннях GMail і використовувати його в SmtpClient. Ви повинні робити це незалежно, а не виставляти звичайний пароль.
Даніель Дайсон


2

введіть тут опис зображення Переконайтеся, що дозволено недоступний додаток Access.

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("xx@gmail.com");
        mail.Sender = new MailAddress("xx@gmail.com");
        mail.To.Add("external@emailaddress");
        mail.IsBodyHtml = true;
        mail.Subject = "Email Sent";
        mail.Body = "Body content from";

        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
        smtp.UseDefaultCredentials = false;

        smtp.Credentials = new System.Net.NetworkCredential("xx@gmail.com", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }

1
Посилання для зміни параметра "Доступ до менш захищеного додатка" тут - google.com/settings/security/lesssecureapps Змінення налаштування не допомогло мені подолати помилку
mvark

1

Нижче мій код. У мене також була така ж помилка, але проблема полягала в тому, що я неправильно дав свій пароль. Код нижче буде відмінно працювати ... спробуйте

            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);

Ви можете поповнити це повідомлення надіслати поштою


1

Якщо це новий обліковий запис google, вам доведеться надіслати електронний лист (перший) через звичайний інтерфейс користувача. Після цього ви можете використовувати свою програму / робота для надсилання повідомлень.


1

Вам слід розглянути можливість конфігурації даних конфігурації SMTP у файлі config та не перезаписувати їх у коді - див. Дані конфігурації SMTP за адресою http://www.systemnetmail.com/faq/4.1.aspx

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="admin@example.com">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="admin@example.com" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>

1

Я зустрічався з тією ж проблемою кілька разів. Після ввімкнення менш безпечної опції програми проблема вирішена. Увімкніть тут менш безпечний додаток: https://myaccount.google.com/lesssecureapps

сподіваюся, що це допоможе.



0

деякі smtp-сервери (захищені) вимагають, щоб ви вводили і ім’я користувача, і електронну пошту, якщо його gmail, то найбільше шансів на проблему "Менш безпечний вхід", на яку потрібно звернутись, інакше ви можете спробувати:

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port)
{
    var loginInfo = new NetworkCredential(username, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient(smtp, port);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

зауважте, що повідомлення електронної пошти та ім'я користувача є різними на відміну від певної реалізації, яка позначає їх як однакові.

викликати цей метод можна так:

SendEmail("to-mail@gmail.com", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

0

Увімкнувши менш безпечний варіант і спробувавши інші рішення, якщо ви все ще стикаєтеся з тією ж проблемою, спробуйте скористатися цим перевантаженням:

client.Credentials = new NetworkCredential("mymailid", "mypassword");

замість:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");

0

Я створив передплату для розробників Microsoft 365 (E5) сьогодні вранці і використав її для надсилання тестового електронного листа за допомогою наступних налаштувань

using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential(username, password);
    client.Host = "smtp.office365.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

На початку це не спрацювало, тому що я постійно отримував це повідомлення про помилку, за винятком, кинутого цим кодом. Потім я провів близько 4 годин, граючи з налаштуваннями центру адміністрування Microsoft 365 та читаючи статті, щоб вирішити проблему. Зрештою я змінив пароль адміністративного центру Microsoft 365, і він працював як принадність. Отже, варто спробувати змінити пароль, коли отримаєте це повідомлення, перш ніж замислюватися над будь-яким попереднім рішенням.

Зауважте, що пароль точно недійсний, оскільки я ввійшов у свій обліковий запис Microsoft 365 без проблем. проте зміна пароля вирішила проблему.


-1

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

step1: smtp.gmail.com - сервер gmail, тому перейдіть до налаштувань gmail свого облікового запису-> натисніть, щоб побачити всі налаштування-> Переадресація та IMAP / POP-> перевірте, як спливаюче вікно та IMP увімкнено, якщо його не ввімкнено -> Зберегти зміни. step2 - натисніть на зображення профілю gmail-> натисніть Керуйте своїм обліковим записом google-> перейдіть на вкладку безпеки-> перевірте доступ до менш захищених програм (ця опція буде доступна, якщо ви не вирішите двоетапну перевірку) -> за замовчуванням google встановить його як відключення, зробить його можливим використовувати ваш реальний пароль Gmail, який працює для надсилання електронної пошти. Примітка: - Увімкнення доступу до Gmail для менш захищених додатків може бути для вас небезпечним, тому я не рекомендую цього

stepp3: якщо у вашому обліковому записі ввімкнено двоетапну перевірку або ви хочете використовувати інший пароль, ніж ваш gmail Реальний пароль, використовуючи специфічний пароль програми, тоді спробуйте це: - натисніть на зображення профілю gmail-> натисніть Керуйте своїм обліковим записом google-> перейдіть до безпеки вкладка-> пошук PASSWORD APP-> вибрати будь-яке ім'я програми-> вибрати будь-яке ім’я пристрою-> натисніть на кнопку gener-> скопіюйте 16-значний пароль та вставте його у свою програму, куди потрібно ввести пароль gmail замість ваш справжній gmail пароль.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.