Wysyłanie maila C# 2.0 - z serwera interii


(Kruchy Jr) #1

Potrzebuję wysłać maila z programu napisanego w C# 2.0. Niestety podczas wysłania maila za pomocą kodu przedstawionego poniżej dostaję wyjątek STMPException z następującym opisem:

"Syntax error, command unrecognized. The server response was: 5.7.8 Error: authentication failed: Invalid base64 data in continued response".

Co ciekawe dzieje się tak, kiedy do wysyłki używam konta interia.pl, a np. z wp.pl mail zostaje wysłany bez żadnego problemu. Konfiguracja użytkownika/hasła i namiarów na serwer też wydaje się w porządku, ponieważ dokładnie ten sam kod odpalony pod linuxem i mono wysyła maila(z konta interia.pl).

Testowe środowisko pod windows to Windows XP + Visual Studio 2005.

Czy ktoś może wie w czym może być problem?

public void WyslijMaila(string p_strAdresat,string p_strTemat, string p_strTresc,

		                        string[] p_straListaZalcznikow, bool p_bHtml, Stream[] p_streamZalaczniki )

		{





		    bool auth = true;

		    MailAddress fromEmail = new MailAddress(AdresOd);

		    MailMessage email = new MailMessage();

		    email.From = fromEmail;				

		    email.To.Add(p_strAdresat);

		    email.Subject = p_strTemat;

		    email.IsBodyHtml = p_bHtml;

		    email.Body = p_strTresc;


			if (p_bHtml)

			{



				AlternateView htmlView = StworzAlternateView(p_strTresc);


				email.AlternateViews.Add(htmlView);


			}



			foreach (string s in _alKopie)

			{

				email.CC.Add(s);	

			}


			if (p_straListaZalcznikow != null )

			{

				foreach (string s in p_straListaZalcznikow)

				{

					email.Attachments.Add(new Attachment(s));	


				}

			}

			if (p_streamZalaczniki != null)

			{

				foreach (Stream stream in p_streamZalaczniki)

				{

					email.Attachments.Add( new Attachment(stream, "Zdjęcie") );	

				}

			}



		    SmtpClient client = new SmtpClient(SerwerWysylajacy, IPortSerwera);

		    if (auth)

		    {

		        System.Net.NetworkCredential SMTPUserInfo = new

		        System.Net.NetworkCredential(Uzytkownik, Haslo);

		        client.UseDefaultCredentials = false;

		        client.Credentials = SMTPUserInfo;

		    }

		    client.Send(email);//Wysłamy wiadomość

		    email.Dispose();


		}

(Tomek Matz) #2

Błąd wydaje się wskazywać na to, że jednak dane do logowania są niepoprawne:

http://www.ietf.org/rfc/rfc4954.txt

Nie widzę nigdzie w kodzie, żebyś włączał szyfrowanie. Służy do tego właściwość EnableSsl. Wydaje mi się, że to może być problemem. Porty jakich używasz to 465 lub 587 a adres serwera SMTP to poczta.interia.pl?


(Kruchy Jr) #3

We wklejonym kodzie nie było client.EnableSsl = true;, ale wstawienie tego nic nie zmienia(a i bez ustawienia tego debuger pokazywał, że ta właściwość jest ustawiona na true).

Dane serwera wysyłającego(używane przeze mnie do wysłania maila są następujące):

smile.zdjecia@interia.pl

587

poczta.interia.pl

W sumie jest mało prawdopodobne, że dane przy pomocy których chce wysłać są złe, bo ten sam kod programu, ten sam plik konfiguracyjny, z którego program czyta dane serwera smtp pod Ubuntu 10.10 i mono wysyła maila. Dla mnie właśnie to najbardziej wydaje się dziwne, że ten sam kod działa pod mono, a pod windowsem i .Net rzuca wyjątek.


(Tomek Matz) #4

Hm, kazałem Ci włączyć EnableSsl, bo zgodnie z dokumentacją domyślna wartość tego pola to false (http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.enablessl%28v=VS.80%29.aspx). Jeśli jednak z jakiegoś powodu u Ciebie jest true, to dobrze.

Spróbuj może wysłać jakiegoś e-maila za pomocą jakiegoś popularnego klienta poczty (np. Outlook-a). Daj znać, czy Ci się to uda. Może to jakieś problemy z samym serwerem?

-- Dodane 21.11.2011 (Pn) 1:45 --

Przejrzyj ten link http://blogs.msdn.com/b/akashb/archive/2009/09/16/system-net-mail-unable-to-authenticate-against-some-third-party-smtp-servers.aspx

i powiedz mi, czy zadziała Ci ten kod:

public static void SendTestMessage()

{

    System.Web.Mail.MailMessage eMail = new System.Web.Mail.MailMessage();

    eMail.BodyFormat = System.Web.Mail.MailFormat.Text;

    eMail.From = "WSTAW";

    eMail.To = "WSTAW";

    eMail.Subject = "Temat";

    eMail.Body = "Tekst";


    eMail.Fields["http://schemas.microsoft.com/cdo/configuration/smtsperver"] = "poczta.interia.pl";

    eMail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"] = 587;

    eMail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2;

    eMail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"] = 1;

    //eMail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpusessl"] = true;

    eMail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusername"] = "WSTAW";

    eMail.Fields["http://schemas.microsoft.com/cdo/configuration/sendpassword"] = "WSTAW";


    System.Web.Mail.SmtpMail.SmtpServer = "poczta.interia.pl";

    System.Web.Mail.SmtpMail.Send(eMail);

}

(Kruchy Jr) #5

Podany w poście wyżej kod zadziałał pod Windows, natomiast pod Linux-em i mono daje wyjątek.

To konto, z którego chcę wysłać na pewno działa, bo udawało się wysłać pod Ubuntu.

Tylko ja używałem MailMessage nie z przestrzeni nazw System.Web.Mail tylko z System.Net.Mail.


(Tomek Matz) #6

Przejrzyj ten link, który podałem wyżej. Tam jest wyjaśnione, dlaczego pod Windows-em, ta Twoja wersja kodu nie działa (mimo tego, że jest poprawna). To jest wina serwera SMTP. Być może implementacja klas z przestrzeni nazw System.Net.Mail w Mono różni się od implementacji tych samych klas w .NET Framework i dlatego na Mono to działa, a na .NET Framework nie (obstawiam, że tak właśnie jest)? Musiałbyś przeanalizować logi.


(Kruchy Jr) #7

Chyba nieświadomie wprowadziłem w błąd. Kod bez email.enableSsl działał pod Ubuntu, a jeśli włączę EnableSsl, to nie działa. Ale pod Windows bez jak i z włączonym EnableSsl nie działa.


(Tomek Matz) #8

Nie, nie wprowadziłeś w błąd. Dokładnie Cię rozumiem. Początkowo myślałem, że to wina EnableSsl ustawionego na false, ale to nie to. Myślałem tak dlatego, bo np. gmail wymaga bezpiecznego połączenia, ale jak się okazuje interia nie, tzn. transmisja może iść kanałem niezaszyfrowanym. Problemem jest to o czym mówiłem w moim poprzednim poście (bankowo).


(Kruchy Jr) #9

Dzięki za pomoc, jeszcze prześledzę dokładnie linka i spróbuje zmusić kod do działania pod oboma systemami. Dam znać jak uda mi się rozwiązać.