none
Error al enviar correo desde servidor Windows Server 2012 RRS feed

  • Pregunta

  • Hola comunidad, migre una aplicación web en asp.net de windows server 2008 a windows server 2012, el código de olvido su contraseña funcionaba en 2008 pero ahora no envía los correos, probé con un cliente de outlook en el server 2012 y los mensajes si envían, pero desde la aplicación no, este es el método que utilizo:

        bool SendEmail(string correo, string body, string asunto)
        {
            bool isSend = false;
            var email = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
            
    
            var mailMessage = new MailMessage { From = new MailAddress(email.From) };
            mailMessage.To.Add(new MailAddress(correo));
            mailMessage.Subject = asunto;
            mailMessage.Body = body;
            mailMessage.IsBodyHtml = true;
    
            // Send the email
            var client = new SmtpClient();
            try
            {
                client.Send(mailMessage);
                isSend = true;
                Log = "cliente host: " + client.Host + " client port: " + client.Port + " Credenciales" + client.Credentials;
            }
            catch (Exception ex)
            {
                Log = ex.Message + " stacktrace: " + ex.StackTrace + "    cliente host: " + client.Host + " client port: " + client.Port + " Credenciales" + client.Credentials;
    
                Console.WriteLine("Exception caught in CreateTestMessage4(): {0}",
                            ex.ToString());
            }
            return isSend;

    y esto en el web config

    <system.net>
        <mailSettings>
          <!-- E-mail server settings -->
          <smtp from="smtp@domain.com.co">
            <network host="smtp-server.com.co" port="25" userName="" password="" defaultCredentials="true" />
          </smtp>
        </mailSettings>
      </system.net>

    Tambien probé con este otro método pero no funciona

     private bool enviarCorreo(string correo, string body, string asunto)
        {
            bool isSend = false;
            MailAddress from = new MailAddress("email@example.com.co");
            MailAddress to = new MailAddress(correo);
            MailMessage message = new MailMessage(from, to);
            message.Subject = asunto;
            message.Body = body;
            SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings["Correo"]);
            Console.WriteLine("Sending an e-mail message to {0} by using SMTP host {1} port {2}.",
                 to.ToString(), client.Host, client.Port);
    
            try
            {
                client.Send(message);
                isSend = true;
                Log = "cliente host: " + client.Host + " client port: " + client.Port + " Credenciales" + client.Credentials;
            }
            catch (Exception ex)
            {
                Log = ex.Message + " stacktrace: " + ex.StackTrace + "    cliente host: " + client.Host +" client port: "+ client.Port + " Credenciales" + client.Credentials;
                
                Console.WriteLine("Exception caught in CreateTestMessage4(): {0}",
                            ex.ToString());
            }
    
            return isSend;
        }
    

    y en el web config

    <appSettings>
      <add key="Correo" value="smtp-domain.com.br" />
    </appSettings>

    Localmente si funciona el envio o desde el servidor 2008, pero desde el servidor 2012 no envia, este es el mensaje que me da el stacktrace

    Failure sending mail. stacktrace: at System.Net.Mail.SmtpClient.Send(MailMessage message) at

    OlvidoContraseña.SendEmail(String correo, String body, String asunto) cliente host: smtp-domain.com.br client

    port: 25 CredencialesSystem.Net.System NetworkCredential


    Gracias por su ayuda

    miércoles, 31 de enero de 2018 13:30

Respuestas

  • Fíjate que en la configuración del correo tienes puesto defaultCredentials="true". Eso significa "autenticarse ante el servidor SMTP usando la cuenta de usuario actual que esta ejecutando el envio de correo". Para una aplicación ASP.NET, esa cuenta será normalmente la del Pool de la aplicación en IIS. Y puede perfectamente ocurrir que la cuenta del Pool del servidor antiguo esté autorizada en tu proveedor de correo, y la cuenta del servidor nuevo no esté dada de alta. Verifica en la configuración del servidor de correo que la nueva cuenta está autorizada.
    miércoles, 31 de enero de 2018 16:47