2011-02-23 7 views
6

Estoy usando este código para enviar un correo electrónico SMTP a través del servidor SMTP de yahoo, es para un proyecto personal que estoy escribiendo.C# El código de envío de correo electrónico SMTP falla para Yahoo Mail pero funciona bien para otros servidores, ¿alguien puede ayudar?

using System.Net.Mail; 
using System.Net; 

SmtpClient theClient = new SmtpClient("smtp.mail.yahoo.com", 465); 
theClient.UseDefaultCredentials = false; 
theClient.Credentials = new NetworkCredential("username", "password"); 
theClient.EnableSsl = true; 

MailMessage theMessage = new MailMessage("[email protected]", 
             "[email protected]"); 

theMessage.Subject = "Dave test from C# subject"; 
theMessage.Body = "Dave test from C# body"; 

theClient.Send(theMessage); 

Está todo código bastante estándar para el envío de correo electrónico SMTP, pero ... el servidor parece arrojar un error. Termina a la fuerza la conexión. Esto no ocurre si uso otros servidores SMTP como Gmail, Windows Live u otros servidores ISP Smtp.

Esta es la excepción y Seguimiento de la pila:

System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. 
at System.Net.Mail.SmtpClient.Send(MailMessage message) 
at ConsoleApplication1.Program.Main(String[] args) in E:\dev\ARCSoftware.FTPProcessor\ConsoleApplication1\Program.cs:line 28 

Sé que el problema no es el medio ambiente, ya que me puedo enviar al mismo servidor con estas configuraciones exactas utilizando Outlook Express. Me pregunto si necesito enviar un certificado o algo así.

Si usted o alguien que usted conozca tiene alguna idea al respecto, le agradecería enormemente su ayuda.

+0

Yahoo probablemente tenga implementadas (diferentes) políticas antispam. Tendrás que consultarles cuáles son las reglas. –

+0

¿Son correctos los parámetros de NetworkCredential? nombre de usuario es la dirección de correo electrónico completa – Tony

+0

Gracias por los capítulos de entrada. Sí, he comprobado su documentación y especifican el uso del nombre de usuario sin @ yahoo.com. Como dije, funciona a través de Outlook Express con la misma configuración. –

Respuesta

2

No es apoyado a través de 465, pero detalla el siguiente post una solución

How can I send emails through SSL SMTP with the .NET Framework?

ACTUALIZACIÓN esta liga detalles por las que podría trabajar a través de Outlook Express, pero no a través de la System.Net.Mail

http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

+0

Gracias por la respuesta. –

+0

El antiguo método System.Web.Mail/CDO funcionará, pero todo el espacio de nombres ha quedado obsoleto desde 2.0. Probablemente estaría bien para este proyecto (que es un "Proyecto Personal"), pero no lo usaría en nada que esté en producción. –

1

El puerto 465 no es compatible con System.Net.Mail.SmtpClient.

http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.enablessl.aspx

Desde la Sección Observaciones:

Este método de conexión a veces se llama SMTP/SSL, SMTP sobre SSL o SMTPS y por defecto utiliza el puerto 465. Este método de conexión mediante SSL alternativo es no es compatible actualmente.

Editar: Puede intentar usar el puerto 587 en su lugar (si Yahoo lo admite).

-1

creo que deberías volver a using System.Web.Mail que le permite controlar los campos que no son accesibles a través de la nueva System.Net. Intenta jugar con eso. Por ejemplo, podría intentar esto: (uso está documentado here, los campos están documentadas here)

 MailMessage msg = new MailMessage();    
     msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", "smtp.mail.yahoo.com"); 
     msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", "465"); 

     // try "2", I have not tested for yahoo mail 
     msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", "2");          
     msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "1");       
     msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); // 0= anonymous - 1=basic - 2=NTLM 
     msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "yahoousername"); 
     msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "yahoopwd"); 
5
using System.Net.Mail; 
using System.Net; 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void btn_Send_Click(object sender, RoutedEventArgs e) 
    { 
     MailMessage oMail = new MailMessage(new MailAddress("[email protected]"), new MailAddress("[email protected]")); 
     SmtpClient oSmtp = new SmtpClient(); 
     oSmtp.Host = "smtp.mail.yahoo.com"; 
     oSmtp.Credentials = new NetworkCredential("username", "password"); 
     oSmtp.EnableSsl = false; 
     oSmtp.Port = 587; 
     oSmtp.Send(oMail); 
    } 
} 
+0

¿lleva tiempo enviar el correo? – kplshrm7

0

que tenían el mismo problema hasta que me puse el puerto a 587 y SSL desactivado.

Cuestiones relacionadas