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

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

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

var fromAddress = new MailAddress("[email protected]");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("[email protected]");

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 я получил следующее письмо после того, как запустил код с рабочего сервера

Hi,

Кто-то недавно использовал ваш пароль, чтобы попытаться войти в свой Google Аккаунт [email protected] Этот человек использовал приложение, такое как электронная почта, клиент или мобильное устройство.

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

Friday, 3 January 2014 13:56:08 o'clock UTC IP Address: xxx.xx.xx.xxx(abcd.net.) Location: Philadelphia PA, Philadelphia, PA, USA

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

Сбросить пароль

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

case 1:, когда пароль неверен

case 2: при попытке входа в систему из какого-либо приложения

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

Существует решение для каждого

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

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

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

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

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

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

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

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

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

Ответ 3

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

После входа на ваш адрес электронной почты НАЖМИТЕ ЗДЕСЬ

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

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

Ответ 4

Потратив пару часов сегодня, пытаясь найти здесь каждое решение, я все еще не смог обойти эту точную ошибку. Я использовал 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
}

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

Ответ 5

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

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

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

Ответ 6

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

  1. Отключение двухфакторной аутентификации
  2. Установите "Разрешить менее безопасные приложения" в положение ON
  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("[email protected]", "secretpassword"),
            EnableSsl = true
        };

        client.Send("[email protected]", emailTo, subject, body);
    }

Отключение двухфакторной аутентификации Turning off 2-factor authentication

Установите "Разрешить менее безопасные приложения" в положение ON (на той же странице необходимо прокрутить вниз) Allow less secure apps

Ответ 8

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

Ответ 9

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

Ответ 10

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

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

Вы можете направить его в мой блог

Ответ 11

просто включите настройку или gmail. см. ниже изображение:

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

Ответ 12

У меня была та же проблема для приложения, развернутого в 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("[email protected]", "my_password"); 

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

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

Ответ 13

Что сработало для меня, так это активировать опцию для менее безопасных приложений (я использую 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("[email protected]")
        mail.[To].Add("[email protected]")
        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

Ответ 14

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

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

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

Ответ 15

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

Ответ 16

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

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

var fromAddress = new MailAddress([email protected], "From Name");
var toAddress = new MailAddress("[email protected]", "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);
}

Ответ 17

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

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

Ответ 18

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

  • Войдите в свой admin.google.com
  • Нажмите SECURITY < - если это не видно, затем нажмите "БОЛЬШЕ УПРАВЛЕНИЯ" и добавьте его из списка
  • Нажмите Основные настройки
  • Перейдите к нижней части окна "Основные настройки", нажмите ссылку "Перейти к настройкам для менее безопасных приложений"
  • Выберите параметр № 3: Обеспечьте доступ к менее безопасным приложениям для всех пользователей (не рекомендуется).
  • Нажмите SAVE в нижней части окна

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

Ответ 19

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

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

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

Снимок экрана

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

Ответ 20

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

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

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

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

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

Ответ 21

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

делать:

https://myaccount.google.com/lesssecureapps

Ответ 22

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

:)

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

Ответ 24

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

Host = "smtp.googlemail.com"

которые работают для меня