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


112

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

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

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

Когда я отправляю кнопку, появляется сообщение об ошибке, например

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
Moslem Hady

Вам следует подумать об указании данных конфигурации SMTP в файле конфигурации и не перезаписывать их в коде - см. Данные конфигурации SMTP на systemnetmail.com/faq/4.1.aspx
Майкл Фрейдгейм

Ответы:


62

Сначала проверьте наличие проблем, связанных с безопасностью Gmail. Возможно, вы включили двойную аутентификацию в Gmail. Также проверьте свой почтовый ящик Gmail, если вы получаете какие-либо предупреждения системы безопасности. В таких случаях проверьте другой ответ @mjb, как показано ниже

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

client.UseDefaultCredentials = true;

установите значение false.

Обратите внимание на ответ @Joe King - вы должны установить client.UseDefaultCredentials, прежде чем устанавливать client.Credentials


2
В этом случае вы должны поделиться своим кодом. Выше ответ относится к рассматриваемому коду
Ронак Патель

7
Обратите внимание на ответ @Joe King - вы должны установить client.UseDefaultCredentials, прежде чем устанавливать client.Credentials
Аарон

1
Этот ответ не сработает, я думаю, что большинство людей сталкивались с безопасностью на стороне Gmail. см. ответ mjb для правильного решения
Джерри Лян

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

3
Установка client.UseDefaultCredentials = false; перед client.Credentials и установкой client.EnableSsl = true; сделал свое дело в моем случае.
сложено

146

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

Я нашел это решение:

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 в коде творит чудеса, большое спасибо,
Крауч

1
Чем вы @mjb за то, что поделились ответом. Это спасает мне жизнь :)
Mayeed

3
это должен быть выбранный ответ
thatOneGuy

2
Это была моя проблема, спасибо, что столкнулись с проблемой и дали более пояснительный ответ.
Bojan

У меня тоже сработало. Спасибо @mjb
Rajbir Jawanda

44

Убедитесь, что вы установили SmtpClient.Credentials после звонка SmtpClient.UseDefaultCredentials = false.

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


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

4
@Joe King: Ты просто классный друг ..... искал это уже 3 часа :)
Jatin

1
Спасибо, @Joe King, это жизненно важная информация, отсутствующая в документах MS. Это было решением моей проблемы с отправкой с именем пользователя и паролем.
Аарон

1
Это легко упустить из виду, но, как я только что выяснил, порядок важен.
GatesReign

1
Да. спас мой день. вам необходимо вызвать UseDefaultCredentials = false перед установкой учетных данных.
Rendel

34

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

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

Если эти шаги не помогли, проверьте этот ответ .
Возможно, вы тоже найдете что-то полезное в этом FAQ по System.Net.Mail .


1
Этот ответ очень полезен ... решил мою проблему. Большое спасибо
Hari

1
если он все еще не работает, перейдите по этой ссылке g.co/allowaccess и разрешите доступ
Portekoi

1
«Доступ для менее безопасных приложений» спас мне день.
Ромил Кумар Джайн,

1
Эта часть сделала это за меня: «Включите доступ для менее безопасных приложений». Спасибо!
Тадей

11

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


Действительно лучший ответ! Я снова зашел в систему, и это сработало! PS: Мне нужно было
ввести капчу в

Я получил эту ошибку, так как моя учетная запись 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.
Abhay Andhariya

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


4

попробуйте разрешить менее безопасный доступ к приложениям.

Здесь вы можете включить менее безопасное приложение после входа в систему с помощью Gmail.

https://myaccount.google.com/lesssecureapps

Спасибо.


3

Я столкнулся с той же проблемой, даже если установил для UseDefaultCredentials значение false. Позже я обнаружил, что основная причина в том, что я включил «двухэтапную аутентификацию» в своей учетной записи. После того, как я его выключил, проблема исчезла.


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

2

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

        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 в файле конфигурации и не перезаписывать их в коде - см. Данные конфигурации 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 Developer (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» -> проверьте, включены ли pop и imap, если не включить -> Сохранить изменения. step2 - щелкните изображение своего профиля gmail-> нажмите «Управление учетной записью Google» -> перейдите на вкладку «Безопасность» -> проверьте доступ к менее безопасным приложениям (эта опция будет доступна, если вы не выбрали двухэтапную проверку) -> по умолчанию Google установит для него отключение, включите использование вашего реального пароля Gmail для отправки электронной почты. Примечание: -Включение доступа к Gmail для менее безопасных приложений может быть опасно для вас, поэтому я не рекомендую это

Шаг 3: -если в вашей учетной записи включена двухэтапная проверка или вы хотите использовать пароль, отличный от вашего gmail. Настоящий пароль с использованием специального пароля приложения, попробуйте следующее: - нажмите на изображение своего профиля gmail -> нажмите Управление учетной записью google -> перейдите в безопасность вкладка-> поиск ПАРОЛЯ ПРИЛОЖЕНИЯ-> выберите любое указанное имя приложения-> выберите любое имя устройства-> нажмите генерировать-> скопируйте 16-значный пароль и вставьте его в свое приложение, где вы должны ввести пароль Gmail вместо ваш настоящий пароль Gmail.

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