locked
enviar un mail RRS feed

  • Pregunta

  • saludos
     tengo la siguiente clase para enviar mails
    using
     System;
    using
     System.Collections.Generic;
    using
     System.ComponentModel;
    using
     System.Text;
    using
     System.Net;
    using
     System.Net.Mail;
    
    //Mime is Not necerrary if you dont change the msgview and 
    
    //if you dont add custom/extra headers 
    
    
    namespace
     EWarehouseWs
    {
        public
     class
     SendMail
        {
            public
     static
     bool
     MailSent { get
    ; private
     set
    ; }
            public
     MailAddress Sender { get
    ; set
    ; }
            public
     string
     PassWordSender { get
    ; set
    ; }
            public
     List<MailAddress> To { get
    ; set
    ; }
            private
     MailMessage _mailMessage;
            public
     string
     Mensage { get
    ; set
    ; }
            public
     string
     Subject { get
    ; set
    ; }
            public
     bool
     IsBodyHtml { get
    ; set
    ; }
            public
     MailPriority Priority { get
    ; set
    ; }
            public
     NetworkCredential Credential { get
    ; set
    ; }
            public
     string
     Host { get
    ; set
    ; }
            public
     bool
     EnableSsl { get
    ; set
    ; }
            public
     static
     string
     Estado;
            public
     static
     bool
     Sucesfull;
    
            public
     SendMail()
            {
                Sender = new
     MailAddress("hhhhhhg3@gmail.com"
    , "E-WareHouse"
    , Encoding.UTF8);
                PassWordSender = "ghhhhhhh"
    ;
                EnableSsl = true
    ;
                Credential = new
     NetworkCredential(Sender.Address, PassWordSender);
                Host = "smtp.gmail.com"
    ;
                To = new
     List<MailAddress> { Sender };
            }
            public
     void
     CreateMessage()
            {
                _mailMessage = new
     MailMessage { Sender = Sender };
    
                if
     (To != null
    )
                {
                    foreach
     (var to in
     To)
                    {
                        _mailMessage.To.Add(to);
                    }
                }
                _mailMessage.From = Sender;
    
                _mailMessage.Subject = Subject;
                _mailMessage.SubjectEncoding = Encoding.UTF8;
                _mailMessage.Body = Mensage;
                _mailMessage.BodyEncoding = Encoding.UTF8;
    
                _mailMessage.IsBodyHtml = IsBodyHtml;
    
                _mailMessage.Priority = Priority;
            }
    
            public
     void
     Send()
            {
                //Add the Creddentials
    
                var client = new
     SmtpClient
                                 {
                                     Credentials = Credential,
                                     Port = 587,
                                     Host = Host,
                                     EnableSsl = EnableSsl
                                 };
    
                client.SendCompleted += ClientSendCompleted;
                object
     userState = _mailMessage;
                try
    
                {
                    //you can also call client.Send(msg)
    
                    client.SendAsync(_mailMessage, userState);
                }
                catch
     (SmtpException ex)
                {
                    throw
     new
     SmtpException("Error Al Enviar El Mensage de Error"
    ,ex);
                }
            }
    
            private
     static
     void
     ClientSendCompleted(object
     sender, AsyncCompletedEventArgs e)
            {
                var mail = (MailMessage)e.UserState;
                var subject = mail.Subject;
    
                if
     (e.Cancelled)
                {
                    var cancelled = string
    .Format("[{0}] Envido Cancelado"
    , subject);
                    Estado = cancelled;
                    //MessageBox.Show(cancelled);
    
                }
                if
     (e.Error != null
    )
                {
                    var error = String.Format("[{0}] {1}"
    , subject, e.Error);
                    Estado = error;
                    //MessageBox.Show(error);
    
                }
                else
    
                {
                    Estado = "Mensage Enviado."
    ;
                    Sucesfull = true
    ;
                    //  MessageBox.Show("Mensage Enviado.");
    
                }
                MailSent = true
    ;
            }
        }
    }
    
    y la instancio de esta forma
      var mail = new
     SendMail { Subject = "Error En E-WareHouse WebService "
    , Mensage = "Error no Expesificado"
     };
                mail.CreateMessage();
                mail.Send();
    
    en windows ella funciona de maravilla
    pero  y la agrego a un webservice 1.1  que esta en un iis de xp
    no se envian los mail

     alguien tiene alguna idea de lo que puede ser?
    gracias de ante mano
    miércoles, 8 de julio de 2009 14:27

Respuestas

  • hola,

    Por lo que cuantas me da la impresion que desde el server donde tienes el servicio web no esta pudiendo conectarse por el puerto del smtp donde esta tu servicio de correo.


    Seguramente esto se deba a que tu servidor este en una DMZ, y esto deberias verlo con el admin de la red, comentandole que deberia habrir los puertos necesarios para que ese servidor pueda acceder al servicio de correo.

    Como te decia si es este el problema se soluciona mediante la configuracion del firewall de la red.


    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 9 de julio de 2009 18:40

Todas las respuestas

  • hola,

    pero la pregunta seria, no envia y lanza un error, o simplemente no envia ?

    has verificado que el iis donde esta hosteado el webservice tien acceso al servidor de mail, o puede salir por el puerto de SMTP, creo recordad que es el 125, pero verificalo.

    has podido agregar lineas de debug que escriban en el eventviewer, para ver por donde pasa, o si da error.

    saludo
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 8 de julio de 2009 16:12
  • simplemente no envia
    pero ahora mismo estoi revisando para ver  por donde pasa,
    miércoles, 8 de julio de 2009 18:21
  • hola,

    recuerda que tienes el System.Diagnostics para poder logear, por ejemplo al event viewer
    mas puntualmente este EventLogEntry es muy util cuando no puedes debugear

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 8 de julio de 2009 18:26
  • parace que es un problema en la configuracion del smtp de iis

    el error que me sale es este


     System.Net.Mail.SmtpException: Failure sending mail. ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 209.85.199.109:587
       at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
       at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
       --- End of inner exception stack trace ---
       at System.Net.Mail.SmtpConnection.ConnectAndHandshakeAsyncResult.End(IAsyncResult result)
       at System.Net.Mail.SmtpClient.ConnectCallback(IAsyncResult result)
       --- End of inner exception stack trace ---

    tendre que investigar como configurarlo
    jueves, 9 de julio de 2009 18:21
  • hola,

    Por lo que cuantas me da la impresion que desde el server donde tienes el servicio web no esta pudiendo conectarse por el puerto del smtp donde esta tu servicio de correo.


    Seguramente esto se deba a que tu servidor este en una DMZ, y esto deberias verlo con el admin de la red, comentandole que deberia habrir los puertos necesarios para que ese servidor pueda acceder al servicio de correo.

    Como te decia si es este el problema se soluciona mediante la configuracion del firewall de la red.


    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 9 de julio de 2009 18:40