Для 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>
что мне делать, чтобы решить эту ошибку и отправить почту?
Ответы
Ответ 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
Убедитесь, что разрешено доступ к менее безопасному приложению.
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");