2010-04-14 13 views
8

Possible Duplicate:
GMail SMTP via C# .Net errors on all portsWysyłanie wiadomości e-mail za pośrednictwem GMail w .NET

otrzymuję następujący błąd, gdy próbuję wysłać wiadomość e-mail w moim C# programu. Używam programu Visual Studio 2008 na Windows 7. Chciałbym wkleić mój kod, a następnie błąd:

class email_log_files 
    { 

      private string login_username = "my_gmail_id"; 
      private string login_password = "my_gmail_password"; 

      public void send_email() 
      { 
       string src_address = "[email protected]"; 
       string dest_address = "[email protected]"; 


       try 
       { 
        MailMessage email_msg = new MailMessage(); 

        SmtpClient email_client = new SmtpClient(); 
        email_msg.From = new MailAddress(src_address); 
        email_msg.Sender = new MailAddress(src_address); 
        email_msg.ReplyTo = new MailAddress(src_address); 
        email_msg.To.Add(dest_address); 
        email_msg.Subject = "Test"; 
        email_msg.Body = "Body of the message"; 
        NetworkCredential credentials = new NetworkCredential(login_username, login_password); 


        email_client.Credentials = credentials; 
        email_client.Host = "smtp.gmail.com"; 
        email_client.Port = 465; 
        email_client.EnableSsl = true; 


        email_client.Send(email_msg); 
        Console.WriteLine("Message Sent Successfully!!"); 
        Console.ReadLine(); 

      } 

     } 
    } 

a komunikat o błędzie jest następujący:

The operation has timed out. 

Dlaczego zawsze limit czasu? Jestem pewien, że mam poprawny adres serwera SMTP i numer portu dla Gmaila, ponieważ mam skonfigurowany mój Outlook z tym samym. Jakaś pomoc lub pomysły?

Po zmianie portu na 587 błąd wygląda następująco. Właśnie wyłączyłem zaporę sieciową, aby sprawdzić, czy to nie był problem. Nowy błąd (na porcie 587):

Ów problem dla mnie, kiedy zmienić port 587:

Failure sending mail. 

System.Net.WebException: Unable to connect to the remote server ---> System.Net. 
Sockets.SocketException: No connection could be made because the target machine 
actively refused it 74.125.113.109:587 

    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddre 
ss socketAddress) 

    at System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP) 

    at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Sock 
et s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, 
IAsyncResult asyncResult, Int32 timeout, Exception& exception) 
    --- End of inner exception stack trace --- 

    at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object ow 
ner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket 
6, Int32 timeout) 

    at System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32 
timeout, GeneralAsyncDelegate asyncCallback) 

    at System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate 
asyncCallback) 

    at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncD 
elegate asyncCallback, Int32 creationTimeout) 

    at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port) 

    at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port) 

    at System.Net.Mail.SmtpClient.GetConnection() 

    at System.Net.Mail.SmtpClient.Send(MailMessage message) 
System 

System.Collections.ListDictionaryInternal 

Dzięki, VP

+1

Nie ma czegoś takiego jak C# .NET. C# to język programowania, .NET jest platformą. –

+13

Dziękuję. Czy miałeś czas na skupienie się na moim prawdziwym pytaniu tutaj? – zack

+0

Myślę, że Scott ma rację, gmail wydaje się odpowiadać na porty 25 i 587. –

Odpowiedz

5

Jego portu ... Gmail wymaga portu 587.

Jeśli to nie zadziała, mogę po prostu podać Ci swoją klasę wiadomości e-mail.

EDIT:

private static void SendEmailMessageGmail(System.Net.Mail.MailMessage message) 
    { 
     message.IsBodyHtml = true; 
     message.BodyEncoding = Encoding.UTF8; 
     System.Net.NetworkCredential cred = new System.Net.NetworkCredential(EmailUsername, EmailPassword); 
     SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 
     smtp.UseDefaultCredentials = false; 
     smtp.EnableSsl = true; 
     smtp.Credentials = cred; 
     smtp.Port = 587; 
     smtp.Send(message); 
    } 

EDIT: Dodaj do tego kodu: email_client.UseDefaultCredentials = false;

+0

lemme zmień go teraz na 587 i sprawdź, czy działa. – zack

+0

Zgadzam się, że port musi zostać zaktualizowany do wersji 587, w początkowej odpowiedzi pominąłam to. Nadal zabrałbym wszystko do pliku web.config, jeśli jest to naprawdę aplikacja internetowa. http://mail.google.com/support/bin/answer.py?hl=pl&answer=13287 –

+0

ma nieprzyjemny błąd po zmianie portu na 587. Mówi, że serwer aktywnie odmawiał połączenia. Wysłałem Ci pełny błąd przez twoją stronę .. proszę sprawdź to .. Dzięki, VP – zack

0

Może to być zapora sieciowa lub coś takiego. Uważam, że najlepszym sposobem wypróbowania tego jest ręczne połączenie z serwerem.

Wystarczy otworzyć wiersz polecenia i wpisać:
telnet your.mail.server 25

To zazwyczaj daje odpowiedź podobną do "220 your.mail.server ESMTP".

Jeśli korzystasz z Vista o Win7, najpierw musisz włączyć wbudowanego klienta Telnet (przejdź do "Programy i funkcje" i wybierz "Włącz lub wyłącz funkcje systemu Windows" i po prostu wybierz klienta Telnet)

+0

telnet smtp.gmail.com 25 nie działa jednak telnet smtp.gmail.com 465 działa i daje mi czarny ekran w wierszu poleceń, tak jakby jego oczekiwanie na jakieś wejście..port 587 tak jak port 25 nie działa dla telnet .. Dzięki, VP – zack

+0

Dostaję to również dla portu 465, ale 25 i 587 działa dobrze dla mnie. Sądzę, że jest to duża szansa, że ​​masz jakąś zaporę sieciową lub jakiś inny program zabezpieczający w taki sposób, że blokuje port, ale gdzie 465 zostało otwarte. –

0

Spróbuj umieścić pełny adres e-mail w NetworkCredential nazwę użytkownika

+0

Wypróbowałem wszystkie te kombinacje ... niezobowiązująca praca ... nadal daje mi błąd – zack

+1

Jest to ważne, jeśli używasz GAFYD - zwykły Gmail może nie wymagać tego, ale jeśli masz hostowaną domenę, potrzebujesz [email protected] – Nate

2

Ponieważ jesteś przedstawieniu System.Web Zakładam, że jest to aplikacja internetowa, choć nie jestem całkiem jasne, że z opisu. Jeśli tak jest w istocie aplikacją internetową, upewnij się, że plik web.config ma następujący wpis:

<system.net> 
    <mailSettings> 
     <smtp> 
     <network host="smtp.gmail.com" port="465" userName="<UID>" password="<PW>"/> 
     </smtp> 
    </mailSettings> 
    </system.net> 

Zapobiega to konieczności podać te informacje w ciągu swojej klasie email_log_files

+0

Proszę spojrzeć na mój zredagowany post. Nadal mam błędy pomimo zmiany portu na 587. Proszę spojrzeć i daj mi znać, jeśli coś Cię uderzy. Dziękujemy, VP – zack

+0

Czy wypróbowałeś rozwiązanie zaakceptowane, które zostało zamieszczone w "Dupe" opublikowanym przez bzlm? http://stackoverflow.com/questions/1082216/gmail-smtp-via-c-net-errors-on-all-ports Zobacz, co jest zwracane po uruchomieniu polecenia telnet: telnet smtp.gmail. com 587 –

+0

Wygląda na to: http://stackoverflow.com/questions/2640507/sending-email-via-gmail-in-net/2640554#2640554 (patrz komentarz) – bzlm

1

Nie wiem, czy to będzie przydatny, ale czy sprawdziłeś, czy Twój adres IP nie blokuje wysyłania e-maili z twojego adresu IP? Miałem kiedyś podobny problem, skończyłem, wyrywając mi włosy przez cały weekend.

Warto więc sprawdzić, czy to wyeliminować. Powodzenia.

+0

Włączenie mojego hotspota z Androidem rozwiązało ten problem. Dziękuję Ci. – Thomas

Powiązane problemy