Wysyłanie maila przez SMTP z SSL (port 465)

0

Cześć.

Próbuję wysłać maila z programu konsolowego z wykorzystaniem skrzynki założonej na wp.pl.

Kod skopiowany gdzieś z neta:

MailMessage message = new MailMessage();
message.To.Add("[email protected]");
message.From = new MailAddress("[email protected]");
message.Subject = "Test";
message.SubjectEncoding = System.Text.Encoding.UTF8;
message.Body = "Test";
message.BodyEncoding = System.Text.Encoding.UTF8;
message.IsBodyHtml = true;
message.Priority = MailPriority.High;

SmtpClient client = new SmtpClient();

client.Credentials = new System.Net.NetworkCredential("[email protected]", "TajneHasło2022");
client.Port = 465;
client.Host = "smtp.wp.pl";
client.EnableSsl = true;

client.Send(message);

Niestety wywołanie metody client.Send(message); zwraca timeout.

Co powinienem zmienić, żeby to zadziałało?

Dane skrzynki na wp:
screenshot-20220519230001.png

1

Korzystasz z System.Net.Mail.SmtpClient? Z tym bywają problemy, trochę dziwnie działa SSL.

Spróbuj bez szyfrowania, czyli tak:

client.Credentials = new System.Net.NetworkCredential("[email protected]", "TajneHasło2022");
client.Port = 587;
client.Host = "smtp.wp.pl";
client.EnableSsl = false;

Ewentualnie zamiast 587 spróbuj 25.

System.Net.Mail.SmtpClient nieraz działa tak, że może szyfrowanie wynegocjować na porcie tekstu jawnego, więc w ten sposób:

client.Credentials = new System.Net.NetworkCredential("[email protected]", "TajneHasło2022");
client.Port = 587;
client.Host = "smtp.wp.pl";
client.EnableSsl = true;

Przy połączeniu na porcie z szyfrowaniem bywają problemy i nie chce się połączyć.

Najlepiej, to zamiast z tego, użyj MimeKit i MailKit.

Z użyciem wymienionych bibliotek powinno być mniej więcej tak:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

System.Threading.CancellationTokenSource cancel = new System.Threading.CancellationTokenSource();

MailKit.Net.Smtp.SmtpClient SmtpClient_ = new MailKit.Net.Smtp.SmtpClient();
//?? start
SmtpClient_.SslProtocols = System.Security.Authentication.SslProtocols.None;
SmtpClient_.SslProtocols = SmtpClient_.SslProtocols | System.Security.Authentication.SslProtocols.Ssl2;
SmtpClient_.SslProtocols = SmtpClient_.SslProtocols | System.Security.Authentication.SslProtocols.Ssl3;
SmtpClient_.SslProtocols = SmtpClient_.SslProtocols | System.Security.Authentication.SslProtocols.Tls;
SmtpClient_.SslProtocols = SmtpClient_.SslProtocols | System.Security.Authentication.SslProtocols.Tls11;
SmtpClient_.SslProtocols = SmtpClient_.SslProtocols | System.Security.Authentication.SslProtocols.Tls12;
//?? stop

SmtpClient_.Connect("smtp.wp.pl", 465, true, cancel.Token);

//?? start
SmtpClient_.AuthenticationMechanisms.Remove("XOAUTH");
//?? stop

//?? start
SmtpClient_.AuthenticationMechanisms.Remove("XOAUTH2");
//?? stop

SmtpClient_.Authenticate("[email protected]", "TajneHasło2022");

MimeKit.MimeMessage Msg = new MimeKit.MimeMessage();
Msg.From.Add(new MimeKit.MailboxAddress("[email protected]", "[email protected]"));
Msg.To.Add(new MimeKit.MailboxAddress("[email protected]", "[email protected]"));
Msg.Subject = "Test";

MimeKit.BodyBuilder BB = new MimeKit.BodyBuilder();
BB.HtmlBody = "Test";
Msg.Body = BB.ToMessageBody();
SmtpClient_.Send(Msg);

Wypróbuj, czy fragmenty kodu pomiędzy komentarzami "//?? start" i "//?? stop" są naprawdę potrzebne, tzn spróbuj i z danym fragmentem i bez niego.

MailKit i MimeKit na pewno działa z pocztą WP.

1 użytkowników online, w tym zalogowanych: 0, gości: 1