Не могу отправить письмо через smtp gmail - PullRequest
0 голосов
/ 25 октября 2019

В C # я пытаюсь отправить электронную почту, используя Gmail. Это мой код:

MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

mail.From = new MailAddress("myemail@gmail.com");
mail.To.Add("myemailto@gmail.com");
mail.Subject = "Test Mail";
mail.Body = "This is for testing SMTP mail from GMAIL";

SmtpServer.Port = 465;
SmtpServer.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypsw");
SmtpServer.UseDefaultCredentials = false;
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SmtpServer.EnableSsl = true;

SmtpServer.Send(mail);

И я получаю ошибку:

{System.Net.Mail.SmtpException: Ошибка при отправке почты. ---> System.IO.IOException: невозможно прочитать данные из транспортного соединения: соединение было закрыто.
в System.Net.Mail.SmtpReplyReaderFactory.ProcessRead (буфер Byte [], смещение Int32, чтение Int32, логическое значениеreadLine)

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Где-то есть ответ, но я не помню, где, поэтому я напишу вам код ниже. Если кто-то найдет ответ, пожалуйста, оставьте комментарий, и я укажу его там.

var smtpClient = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587, // Port 
    EnableSsl = true,
    Credentials = new NetworkCredential("yourmail@gmail.com", "yourpw")
};

MailMessage msg = new MailMessage();
msg.IsBodyHtml = true;
msg.Subject = "Subject";

msg.From = new MailAddress("yourmail@gmail.com");


msg.Body = "Body here";
msg.Bcc.Add(li[i].Value);
smtpClient.Send(msg);
0 голосов
/ 25 октября 2019

Из документации по свойству EnableSsl:

Класс SmtpClient поддерживает только расширение службы SMTP для безопасного SMTP через безопасность транспортного уровня, как определено в RFC 3207. В этом режиме сеанс SMTP начинается снезашифрованный канал, затем клиентом серверу выдается команда STARTTLS для переключения на защищенную связь с использованием SSL. См. RFC 3207, опубликованный Internet Engineering Task Force (IETF) для получения дополнительной информации. Альтернативный метод подключения - это когда сеанс SSL устанавливается перед тем, как будут отправлены какие-либо команды протокола. Этот метод подключения иногда называется SMTP / SSL, SMTP через SSL или SMTPS и по умолчанию использует порт 465. Этот альтернативный метод подключения с использованием SSL в настоящее время не поддерживается.

И короткая история из других веб-сайтовСогласно источникам, порт 465 ожидает, что SSL будет согласован при настройке соединения (не поддерживается SmtpClient), тогда как 587 использует STARTTLS после начального небезопасного диалога (поддерживается SmtpClient)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...