El código de envío de correo electrónico SMTP de C# falla para Yahoo Mail pero funciona bien para otros servidores, ¿alguien puede ayudar?
Estoy usando este código para enviar un correo electrónico SMTP a través del servidor SMTP de Google, es para un proyecto personal que estoy escribiendo.
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);
Todo es un código bastante estándar para enviar correo electrónico SMTP, pero... el servidor parece arrojar un error. Termina por la fuerza la conexión. Esto no sucede si uso otros servidores SMTP como Gmail, Windows Live u otros servidores Smtp de ISP.
Esta es la excepción y el 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
Sin embargo, sé que el problema no es ambiental, ya que puedo enviar al mismo servidor con esta configuración exacta usando Outlook Express. Me pregunto si necesito enviar un certificado o algo así.
Si usted, o alguien que conozca, tiene alguna idea sobre esto, agradecería mucho su ayuda.
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);
}
}
No es compatible con 465, pero la siguiente publicación detalla una solución alternativa
¿Cómo puedo enviar correos electrónicos a través de SSL SMTP con .NET Framework?
ACTUALIZACIÓN: Este enlace detalla por qué podría funcionar a través de Outlook Express, pero no a través de 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
El puerto 465 no es compatible con System.Net.Mail.SmtpClient.
http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.enablessl.aspx
De la sección de comentarios:
Este método de conexión a veces se denomina SMTP/SSL, SMTP sobre SSL o SMTPS y de forma predeterminada utiliza el puerto 465. Este método de conexión alternativo que utiliza SSL no se admite actualmente.
Editar: podrías intentar usar el puerto 587 (si Yahoo lo admite).