Я не могу понять, в чем заключается моя жизнь, почему это не работает.
SmtpClient smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
UseDefaultCredentials = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"),
EnableSsl = true,
Timeout = 10000
};
smtp.Send(mail);
Я получаю:
Для SMTP-сервера требуется безопасное соединение, или клиент не прошел аутентификацию. Ответ сервера: 5.5.1 Требуется аутентификация.
Я только что указал EnableSsl на true, так что это не должно быть проблемой с точки зрения безопасного соединения.
Я запускаю это из localhost. И да, мое имя пользователя и пароль, которые я вводил в auth (мои учетные данные учетной записи gmail), на 100% правы.
Ответ 1
Я знаю, что это старая тема, НО... Google что-то изменил в своих настройках безопасности.
Со всеми ответами боролся, пока я не проверил электронную почту с письмом от Google, заявив, что "мы недавно заблокировали попытку входа в вашу учетную запись Google".
Это привело меня к этой странице:
Безопасность учетной записи Google
В разделе "Доступ к менее защищенным приложениям" вы можете включить доступ к своей учетной записи с других устройств/приложений... например, ваше приложение С#.
Обратите внимание, что больше нет раздела, специфичного для приложения.
Надеюсь, это поможет кому-то... Я просто потерял 30 минут своей жизни...
Ответ 2
Если информация о входе на 100% правильная, вам нужно установить UseDefaultCredentials = false
first, а затем установить учетные данные, которые вы хотите использовать Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere")
.
Если вы сначала установили учетные данные, когда вы установите UseDefaultCredentials = false
, это приведет к тому, что свойство Credentials
будет null
.
Это подключено, но это случилось со мной.
Отлаживайте свой код и проверяйте, имеет ли свойство Credentials
значение null до вызова smtp.Send(message);
. Если это так, попробуйте инвертировать порядок. Кажется, что у вас это в правильном порядке, но если оно нулевое, не используйте встроенную инициализацию.
Надеюсь, что это поможет.
EDIT: Если вы используете двухэтапную аутентификацию, убедитесь, что используете пароль для приложения
Ответ 3
Похоже, что для Gmail требуется пароль для конкретного приложения (а не ваш основной пароль).
Пожалуйста, посмотрите на это: http://support.google.com/mail/bin/answer.py?hl=en&answer=1173270
У меня была такая же проблема в последнее время.
Ответ 4
У меня была эта проблема до и исправлена, выполнив следующие шаги:
- Перейдите к настройкам Моя учетная запись.
- Выберите категорию Вход и безопасность.
- Прокрутите вниз до раздела Связанные приложения и сайты.
- отключите параметр Разрешить менее безопасные приложения.
Я просто отключил этот параметр, и мой код успешно работал.
Ответ 5
Это сработало для меня отлично...
SmtpClient smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
UseDefaultCredentials = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential("myid@gmail.com", "mypassword"),
EnableSsl = true,
Timeout = 10000
};
MailMessage message = new MailMessage();
message.Body = "hello there";
message.Subject = "hi!!";
message.To.Add("myid@gmail.com");
message.From = new MailAddress("myid@gmail.com");
smtp.Send(message);
Ответ 6
<mailSettings>
<smtp from="youremail@gmail.com">
<network host="smtp.gmail.com" password="yourpassword" port="587" userName="username"/>
</smtp>
</mailSettings>
Изменить: попробуйте добавить эту строку smtp.Credentials = Credentials
после этого
Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"),
Ответ 7
Сделайте обратный вызов следующим образом. Скажите System.Net
, чтобы игнорировать ошибку!
Добавьте это до вызова Send()
ServicePointManager.ServerCertificateValidationCallback =
delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{ return true; };
smtp.Send(mail);
Ответ 8
Имел ту же проблему, что и доступ к smtp.gmail.com из приложения ASP.NET, работающего на хостинге Amazon AWS. Оказалось, что моя конфигурация правильная - она также отлично работает с другого компьютера, но gmail будет отклонять мою попытку входа в систему, потому что я пытаюсь войти в систему из необычного места.
Я вошел в gmail через веб-интерфейс (www.gmail.com) и должен был ответить на капчу. После этого он работал.
Ответ 9
Моя проблема заключалась в том, что владелец домена для нашей учетной записи gmail отключил как "доступ для менее безопасных приложений", так и двухэтапную аутентификацию. Не было возможности включить его, я даже не мог увидеть настройку. Поэтому я тестировал свою личную учетную запись, и она работала нормально.
Ответ 10
Очень просто, просто следуйте этому примеру для приложения С# WPF:
private void SendByGmail(string subject, string body, string recepientEmail, string MailMsgFrom, string MailMsgPass)
{
using (MailMessage mailMessage = new MailMessage())
{
mailMessage.From = new MailAddress(MailMsgFrom);
mailMessage.Subject = subject;
mailMessage.Body = body;
mailMessage.IsBodyHtml = true;
mailMessage.To.Add(new MailAddress(recepientEmail));
mailMessage.Priority = System.Net.Mail.MailPriority.High;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
smtp.Timeout = 200000;
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = MailMsgFrom;
NetworkCred.Password = MailMsgPass;
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.Send(mailMessage);
}
}
После этого вы должны получить эту ошибку
smtpException {"The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at"} System.Net.Mail.SmtpException
Чтобы решить эту проблему, сначала войдите в свою учетную запись электронной почты на свою учетную запись google в веб-браузере. Затем просто следуйте по этой ссылке Активность аккаунта Google. Затем вы получите последние Устройства и активность своей учетной записи. Если показ блокирует текущую активность с вашего текущего устройства. Просто разблокируйте это. Затем повторите попытку отправки электронной почты.
Спасибо
Ответ 11
Для меня решение потребовало 2 "шагов":
- установите
UseDefaultCredentials = false
сначала, затем установите учетные данные, которые я хочу использовать Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere")
. Сначала установите учетные данные, когда я установил UseDefaultCredentials = false
, создав свойство Credentials null
.
- Разрешить менее безопасные приложения в моем профиле Google.