Wysyłanie wiadomości e-mail

0

Witam,

chciałbym przy użyciu języka C# wysłać maila. Mam dwa konta pocztowe na gmail'u. Wykonuję zatem poniższy kod:

MailAddress from = new MailAddress("[email protected]");
MailAddress to = new MailAddress("[email protected]");
MailMessage mail = new MailMessage(from, to);
mail.Subject = "test";
mail.Body = "It is test mail";
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.Credentials = new NetworkCredential("[email protected]", "My Password to [email protected]");
    smtp.EnableSsl = true;
    smtp.Send(mail);

Po chwili oczekiwania wywala mi jednak wyjątek:

An unhandled exception of type 'System.Security.Authentication.AuthenticationException' occurred in System.dll Additional information: The remote certificate is invalid according to the validation procedure.

Macie pomysł co jest nie tak z moim kodem? Bo ja już naprawdę nie mam pojęcia. Wydaje mi się, że wszystko jest ok...

0

Kod działa. Podajesz dobre hasło?

0

Kod jest dobry. Wyłącz weryfikację dwuetapową to zadziała :)

0

Czyli wywalić linijkę

smtp.EnableSsl = true;

?

Wtedy wkracza antywirus - z komunikatem:

złamanie zasad wysyłki masowej.

Jeśli naciskam przycisk Przepuść to nie ma żadnej reakcji. Jeśli zamknę okno lub nacisnę przycisk Zablokuj dostaję wyjatek:

An unhandled exception of type 'System.Net.Mail.SmtpException' occurred in System.dll

Additional information: Insufficient system storage. The server response was: ArcaBit Mail Scan: mass mailing restrictions - too many messages, try later

0

Nie to miałem na myśli. W ustawieniach konta GMail masz włączoną weryfikację dwuetapową czyli jak się zalogujesz musisz wpisać np. kod, który dostajesz wiadomością SMS. To jest powodem tego wyjątku. Aby kody zadziałał musisz zalogować się na konto Google i w ustawieniach wyłączyć weryfikację dwuetapową.

0

Po zalogowaniu nigdy nie musiałem wpisywać, żadnego kodu sms. Ale ok, teraz mam na pewno wyłączoną tą weryfikację (na obu kontach).

Jeśli nie wykomentuję linijki

smtp.EnableSsl = true;

to rzuca mi wyjątek:

An unhandled exception of type 'System.Security.Authentication.AuthenticationException' occurred in System.dll

Additional information: The remote certificate is invalid according to the validation procedure.

Natomiast po jej wykomentowaniu:

An unhandled exception of type 'System.Net.Mail.SmtpException' occurred in System.dll

Additional information: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first. m44sm27156563eep.14 - gsmtp

Dla mnie jest to jakaś totalna masakra - wydawało mi się, że będzie to bardzo prosta rzecz, a siedzę już nad tym cały dzień i nie mogę ruszyć z miejsca. Bardzo proszę o pomoc.

Próbowałem też z pocztą wp.pl. Tam rzuca mi w obu przypadkach wyjątkiem:

An unhandled exception of type 'System.Net.Mail.SmtpException' occurred in System.dll

Additional information: The operation has timed out.

0

EnableSSl musi być true i z tym nie kombinuj. Za to brakuje Ci być może tego:

smtp.UseDefaultCredentials = false
0

Nie, wtedy też rzuca wyjątkiem:

An unhandled exception of type 'System.Security.Authentication.AuthenticationException' occurred in System.dll

Additional information: The remote certificate is invalid according to the validation procedure.

Za to w końcu gdzieś wyczytałem aby dodać coś takiego:

ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

I teraz działa - w końcu udało mi się wysłać maila. Niestety - ta linijka to dla mnie kompletna magia. Nie mam pojęcia co tu się dzieje...

0

Spróbuj z Windows Update zainstalować „aktualizację certyfikatów głównych”.

A ta linijka wygląda mi na zuo.

0

Ja mam coś takiego u siebie, i działa:

                using (MailMessage mailMessage = new MailMessage())
                {
                    SmtpClient smtpClient = new SmtpClient();
                    smtpClient.Host = strSMTPHost;
                    smtpClient.Port = iSMTPPort;
                    smtpClient.Credentials = new System.Net.NetworkCredential(strLogin + "@" + strDomain, strPasswod);
                    smtpClient.EnableSsl = bSMTPSSL;

                    mailMessage.From = new MailAddress(strLogin + "@" + strDomain);

                    foreach (string strAddress in strTo)
                        mailMessage.To.Add(strAddress);

                    mailMessage.Subject = strSubject;
                    mailMessage.Body = strBody;

                    mailMessage.Attachments.Add(new System.Net.Mail.Attachment(sAttachment, strFileName));

                    smtpClient.Send(mailMessage);

                    return true;
                }
0
tomekz1991 napisał(a):

Nie, wtedy też rzuca wyjątkiem:

An unhandled exception of type 'System.Security.Authentication.AuthenticationException' occurred in System.dll

Additional information: The remote certificate is invalid according to the validation procedure.

Za to w końcu gdzieś wyczytałem aby dodać coś takiego:

ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

I teraz działa - w końcu udało mi się wysłać maila. Niestety - ta linijka to dla mnie kompletna magia. Nie mam pojęcia co tu się dzieje...

Nigdy nie dodawaj tego na środowisku ACC albo PRD

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