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?

Resuelto David Honess asked hace 13 años • 5 respuestas

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.

David Honess avatar Feb 23 '11 21:02 David Honess
Aceptado
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);
    }
}
jacobsgriffith avatar Sep 26 '2011 17:09 jacobsgriffith

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

statto avatar Feb 23 '2011 15:02 statto

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).

The Moof avatar Feb 23 '2011 14:02 The Moof