miércoles, 11 de septiembre de 2013

Send Mail .NET

Seguro más de uno nos hemos topado con una aplicación para enviar mails y validar al menos el formato de correo, aqui les dejo esta clase, espero les sea util.

class Email
    {

        static MailMessage _message;
        static SmtpClient _clienteSmtp;
        static Attachment _at;
        static int _puerto = 25;
        static string _user = "", _password = "";

        public static bool IsValidEmail(string email)
        {
            string expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";

            if (Regex.IsMatch(email, expresion))
            {
                if (Regex.Replace(email, expresion, String.Empty).Length == 0)
                { return true; }
                else
                { return false; }
            }
            else
            { return false; }
        }

        public static void ConfigEmail(string from, string usuario, string contraseña, int puertoSalida, string smtp)
        {
            _message = new MailMessage();
            _message.From = new MailAddress(from);
            _clienteSmtp = new SmtpClient(smtp);
            _user = usuario;
            _password = contraseña;
            _clienteSmtp.Port = puertoSalida;
        }

        public static bool SendEmail(string to, string cc, string asunto, string mensaje, string ruta_archivo_adjunto)
        {

            try
            {

                _at = new Attachment(ruta_archivo_adjunto);

                _message.Attachments.Add(_at);

                _message.To.Add(to);

                _message.CC.Add(cc);

                _message.Subject = asunto;

                _message.IsBodyHtml = true; //el texto del mensaje lo pueden poner en HTML y darle formato

                _message.Body = mensaje;

                //Establesco que usare seguridad (ssl = Secure Sockets Layer)
                _clienteSmtp.EnableSsl = true;

                _clienteSmtp.UseDefaultCredentials = false;

                _clienteSmtp.Credentials = new NetworkCredential(_user, _password);

                ServicePointManager.ServerCertificateValidationCallback =
                       (s, certificate, chain, sslPolicyErrors) => true;
                _clienteSmtp.Send(_message);

                return true;

            }
            catch
            {

                try
                {
                    //Establesco que no usare seguridad ssl (por si no pudo enviarlo con ssl habilitado)
                    _clienteSmtp.EnableSsl = false;
                    _clienteSmtp.Send(_message);

                    return true;
                }
                catch
                {
                    return false;
                }

            }

        }
    }

No hay comentarios: