2010-04-14 12 views
8

Possible Duplicate:
GMail SMTP via C# .Net errors on all portsL'invio di e-mail tramite Gmail in .NET

sto ottenendo il seguente errore quando provo ad inviare una e-mail nel mio programma C#. Sto usando Visual Studio 2008 su Windows 7. Vorrei incollare il mio codice e poi l'errore:

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(); 

      } 

     } 
    } 

E il messaggio di errore è la seguente:

The operation has timed out. 

Perché è sempre cronometrando fuori? Sono sicuro di avere l'indirizzo del server smtp corretto e il numero di porta per gmail dato che ho configurato la mia prospettiva con la stessa. Qualche aiuto o idee?

Dopo aver modificato la porta in 587, l'errore è il seguente. Ho appena disabilitato il mio firewall per vedere se quello era il problema e NON lo era. Il nuovo errore (per la porta 587):

Questo è l'errore per me quando ho modificare la porta a 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 

Grazie, VP

+1

Non c'è niente come C#. NET. C# è il linguaggio di programmazione, .NET è la piattaforma. –

+13

Grazie. Hai avuto il tempo di concentrarti sulla mia domanda attuale qui? – zack

+0

Penso che Scott sia corretto, gmail sembra rispondere alle porte 25 e 587. –

risposta

5

La tua porta ... Gmail richiede port 587.

Se ciò non funziona, posso semplicemente darti la mia classe di email.

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: aggiungere questo al vostro codice: email_client.UseDefaultCredentials = false;

+0

lemme cambialo in 587 adesso e controlla se funziona .. – zack

+0

Sono d'accordo che la porta deve essere aggiornata a 587, mi mancava quella nella mia risposta iniziale. Vorrei comunque portare tutto al file web.config se è davvero un'applicazione web. http://mail.google.com/support/bin/answer.py?hl=it&answer=13287 –

+0

con un brutto errore quando cambio la porta in 587. Si dice che il server abbia rifiutato attivamente la connessione. Ho inviato l'errore completo a te attraverso il tuo sito .. per favore controlla. Grazie, VP – zack

0

Potrebbe essere un firewall o qualcosa del genere. Trovo che il modo migliore per provarlo sia semplicemente la connessione al server manualmente.

Basta aprire un prompt dei comandi e scrivere:
telnet your.mail.server 25

Questo di solito si dà una risposta simile a "220 your.mail.server ESMTP".

Se siete su Vista o Win7 potrebbe essere necessario abilitare il built-in client Telnet prima (vai su "Programmi e funzionalità" e selezionare "Turn funzionalità di Windows on o off" e basta selezionare il client Telnet)

+0

telnet smtp.gmail.com 25 non funziona tuttavia telnet smtp.gmail.com 465 funziona e mi dà una schermata nera sul prompt dei comandi come se fosse in attesa di qualche input..port 587 proprio come la porta 25 non funziona per telnet .. Grazie, VP – zack

+0

Lo capisco anche per la porta 465, ma 25 e 587 funziona bene per me. Quindi penso che sia un'alta probabilità che tu abbia un firewall di qualche tipo o qualche altro programma di sicurezza nel modo in cui blocca la porta ma dove 465 è stato aperto. –

0

provare a mettere indirizzo email completo nel NetworkCredential nome utente

+0

Ho provato tutte quelle combinazioni ... non funziona ... mi dà ancora l'errore – zack

+1

Questo è valido se stai usando GAFYD - regolare gmail potrebbe non richiedere questo, ma se hai un dominio ospitato hai bisogno di [email protected] – Nate

2

dal momento che si fa riferimento System.Web presumo che ciò è un'applicazione web, anche se non sono del tutto chiaro su che dalla tua descrizione. Se questo è in realtà un'applicazione web, assicuratevi che il vostro file web.config ha la seguente voce:

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

In questo modo si evita di dover specificare queste informazioni all'interno della vostra classe email_log_files

+0

Si prega di dare un'occhiata al mio post modificato. Ho ancora degli errori, nonostante abbia cambiato la porta in 587. Per favore, fammi sapere se qualcosa ti colpisce. Grazie, VP – zack

+0

Hai provato la soluzione accettata che è stata fornita nella pubblicazione StackOverflow "Dupe" fornita da bzlm? http://stackoverflow.com/questions/1082216/gmail-smtp-via-c-net-errors-on-all-ports Vedere che cosa viene restituito quando si esegue il comando telnet: telnet smtp.gmail. com 587 –

+0

Sembra così: http://stackoverflow.com/questions/2640507/sending-email-via-gmail-in-net/2640554#2640554 (vedi commento) – bzlm

1

Non sono sicuro se questo sarà utile, ma hai controllato che il tuo IP non stia impedendo l'invio di email dal tuo IP? Una volta ho avuto un problema simile, ho finito per strapparmi i capelli per tutto il weekend per niente.

Quindi vale la pena controllare solo per eliminarlo. Buona fortuna.

+0

L'attivazione del mio Hotspot Android ha risolto questo problema. Grazie. – Thomas

Problemi correlati