2010-04-14 22 views
8

Possible Duplicate:
GMail SMTP via C# .Net errors on all portsenvío de correo electrónico a través de Gmail en .NET

estoy recibiendo el siguiente error al intentar enviar un correo electrónico en mi programa en C#. Estoy utilizando Visual Studio 2008 en Windows 7. Me pegue el código primero y luego el error:

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

      } 

     } 
    } 

Y el mensaje de error es como sigue:

The operation has timed out. 

¿Por qué es siempre el tiempo de espera? Estoy seguro de que tengo la dirección del servidor smtp correcta y el número de puerto para gmail, ya que configuré mi perspectiva con la misma. Alguna ayuda o ideas?

Después de cambiar el puerto a 587, el error es el siguiente. Solo deshabilité mi firewall para ver si ese era el problema y NO. El nuevo error (por el puerto 587):

Eso es el error para mí cuando cambie el puerto 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 

Gracias, VP

+1

No existe el nombre de C# .NET. C# es el lenguaje de programación, .NET es la plataforma. –

+13

Gracias. ¿Tuviste tiempo para concentrarte en mi pregunta real aquí? – zack

+0

Creo que Scott está en lo cierto, gmail parece responder a los puertos 25 y 587. –

Respuesta

5

Su su puerto ... Gmail requiere puerto 587.

Si eso no funciona, puedo simplemente darle mi clase de correo electrónico.

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: Agregar a su código: email_client.UseDefaultCredentials = false;

+0

déjame cambiarlo a 587 ahora mismo y comprueba si funciona ... – zack

+0

Acepto que el puerto debe actualizarse a 587, me perdí eso en mi respuesta inicial. Todavía sacaría todo al archivo web.config si realmente es una aplicación web. http://mail.google.com/support/bin/answer.py?hl=es&answer=13287 –

+0

teniendo un desagradable error cuando cambio el puerto a 587. Dice que el servidor rechazó activamente la conexión. Le envié el error completo a través de su sitio ... por favor compruébelo ... Gracias, VP – zack

0

Podría ser un firewall o algo así. Encuentro que la mejor manera de probarlo es simplemente conectarme al servidor manualmente.

Sólo tiene que abrir una línea de comandos y escribir:
telnet your.mail.server 25

Esto por lo general le da una respuesta similar a "220 your.mail.server ESMTP".

Si tiene Vista o Win7, primero debe habilitar el cliente Telnet incorporado (vaya a "Programas y características" y seleccione "Activar o desactivar las características de Windows" y simplemente seleccione el cliente Telnet)

+0

telnet smtp.gmail.com 25 no funciona sin embargo telnet smtp.gmail.com 465 funciona y me da una pantalla en negro en el símbolo del sistema como si estuviera esperando alguna entrada ... puerto 587 al igual que el puerto 25 no funciona para telnet .. Gracias, VP – zack

+0

Lo consigo para el puerto 465 también, pero 25 y 587 funciona bien para mi. Así que creo que es muy probable que tengas un firewall de algún tipo u otro programa de seguridad en la forma en que bloquea el puerto pero donde se ha abierto el 465. –

0

tratar de poner la dirección de correo electrónico completa en NetworkCredential nombre de usuario

+0

Probé todas esas combinaciones ... sigue sin funcionar ... todavía me da el error – zack

+1

Esto es válido si está usando GAFYD; es posible que gmail no lo requiera, pero si tiene un dominio alojado necesita [email protected] – Nate

2

Dado que se hace referencia a System.Web asumo que esto es una aplicación web, aunque no estoy muy claro en que a partir de su descripción. Si esto es de hecho una aplicación web, asegúrese de que su archivo web.config tiene la siguiente entrada:

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

Esto evita tener que especificar esta información dentro de su clase email_log_files

+0

Por favor, eche un vistazo a mi publicación editada. Todavía tengo errores a pesar de cambiar el puerto a 587. Eche un vistazo y avíseme si algo le sorprende. Gracias, VP – zack

+0

¿Has probado la solución aceptada que se proporcionó en la publicación "Dupe" stackoverflow proporcionada por bzlm? http://stackoverflow.com/questions/1082216/gmail-smtp-via-c-net-errors-on-all-ports Consulte lo que se devuelve cuando ejecuta ese comando de telnet: telnet smtp.gmail. com 587 –

+0

Parece que sí: http://stackoverflow.com/questions/2640507/sending-email-via-gmail-in-net/2640554#2640554 (ver comentario) – bzlm

1

No estoy seguro si este va a ser útil, pero ¿ha verificado que su IP no está bloqueando el envío de correos electrónicos desde su IP? Una vez tuve un problema similar, terminé tirando de mi cabello todo el fin de semana por nada.

Por lo tanto, vale la pena comprobarlo para eliminar eso. Buena suerte.

+0

Al activar mi Hotspot Android resolví este problema. Gracias. – Thomas

Cuestiones relacionadas