Подтвердить что ты не робот

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

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

    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="[email protected]" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="[email protected]" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="[email protected]">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="[email protected]"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

что мне делать, чтобы решить эту ошибку и отправить почту?

4b9b3361

Ответ 1

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

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

client.UseDefaultCredentials = true;

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

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

Ответ 2

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

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

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

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

  • Приложение Mail на вашем iPhone или iPad с iOS 6 или ниже
  • Приложение Mail на вашем телефоне Windows перед выпуском версии 8.1
  • Некоторые настольные почтовые клиенты, такие как Microsoft Outlook и Mozilla Thunderbird

Следовательно, вам нужно включить Менее безопасный вход в свою учетную запись google.

После входа в учетную запись google перейдите по ссылке:

https://www.google.com/settings/security/lesssecureapps

В С# вы можете использовать следующий код:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("[email protected]");
    mail.To.Add("[email protected]");
    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 protected]", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Информация, разделяемая Майклом Фрейджем в области комментариев:
Подобный ответ со снимками экрана fooobar.com/questions/12321/...

Ответ 3

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

Порядок важен, так как установка SmtpClient.UseDefaultCredentials = false будет reset SmtpClient.Credentials равным нулю.

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

Попробуй так, я просто сделал некоторые легкие изменения:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("[email protected]");
msg.To.Add("[email protected]");
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("[email protected]", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

Также, пожалуйста, покажите свой файл app.config, если у вас есть настройки почты.

Ответ 7

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

Ответ 8

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

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("[email protected]");
        mail.Sender = new MailAddress("[email protected]");
        mail.To.Add("[email protected]");
        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("[email protected]", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

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

Ответ 9

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

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("[email protected]");
            mail.To.Add("[email protected]");
            mail.To.Add("[email protected]");
            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);

Вы можете отменить его в Отправка почты

Ответ 10

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

Ответ 11

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

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="[email protected]">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="[email protected]" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>

Ответ 12

Включите менее безопасное приложение из этой и стрелы...

Ответ 13

некоторые 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("[email protected]", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

Ответ 14

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

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

вместо:

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