[C#] Generar contraseña y enviarla por correo electrónico

Introducción

Puede ocurrir en una aplicación que los usuarios se olviden su contraseña para ingresar al sistema. Una de las acciones que se pueden llegar a tomar es la de generar una nueva contraseña y enviarla al correo electrónico del usuario.

Interfaz Gráfica

La interfaz gráfica es la siguiente:


NOTA: Lo ideal seria usar el correo interno de la empresa a la que pertenece el usuario. En el ejemplo utilizamos el servicio gmail y outlook a modo de ejemplo.

Por un lado tenemos los datos del servicio y por otro los datos del usuario.
Al seleccionar un servicio del combobox se va a completar los campos servidor y puerto. Lo mismo ocurre con el combobox de usuarios, al seleccionar uno de ellos, automáticamente vamos a obtener el correo electrónico del usuario.

Los datos del usuario se van a obtener desde una base de datos que va a estar adjuntada al proyecto. La estructura de la tabla Usuario es muy básica y esta compuesta por las columnas {CodUsuario,Usuario,Contraseña,CorreoElectronico}.

Código

Crearemos una nueva clase llamada Usuario en la cual vamos a definir las propiedades que van a representar a los datos del usuario.

Seguido a esto vamos a crear una funcion llamado CargarUsuario() que va a devolver una lista de usuarios

        private List CargarUsuarios()
        {
            List ListaUsuarios = new List();
            using (SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PassMailBD.mdf;Integrated Security=True;User Instance=True"))
            {
                cnn.Open();
                string ConsultaUsuario = @"SELECT CodUsuario,Usuario,Contraseña,CorreoElectronico FROM Usuario";
                SqlCommand cmd = new SqlCommand(ConsultaUsuario, cnn);
                SqlDataReader lector = cmd.ExecuteReader();

                while (lector.Read())
                {
                    UsuarioEN UnUsuario = new UsuarioEN();
                    UnUsuario.CodUsuario = lector.GetInt32(0);
                    UnUsuario.Usuario = lector[1].ToString();
                    UnUsuario.Contraseña = lector[2].ToString();
                    UnUsuario.CorreoElectronico = lector[3].ToString();

                    ListaUsuarios.Add(UnUsuario);
                }
            }
            return ListaUsuarios;
        }

Dentro del ciclo while, vamos a asignar cada dato a su respectiva propiedad.
Con este paso ya realizado, es posible poder llenar nuestro combobox de usuarios

        UsuarioCMB.DisplayMember = "Usuario";
        UsuarioCMB.ValueMember = "CodUsuario";
        UsuarioCMB.DataSource = CargarUsuarios();

Al seleccionar un item del combobox, lo que haremos es asignar la propiedad CorreoElectronico del usuario al textbox(correo electronico) de la interfaz gráfica.

        private void UsuarioCMB_SelectedIndexChanged(object sender, EventArgs e)
        {
            CorreoElectronicoTxt.Text = ((UsuarioEN)UsuarioCMB.SelectedItem).CorreoElectronico;
        }

Luego de completar los datos llego el momento de generar la nueva contraseña.

Para generar la contraseña se va a utilizar el método Next de la clase Random para obtener un indice aleatorio del string Caracteres e ir concatenando cada caracter a la cadena del StringBuilderLa longitud de la contraseña sera de 10 caracteres.

            string Caracteres = @"1234567890qwertyuiopaslñzxcvbnmQWERTYPÑLKJHGFDSXCVBNM_-.[]{};_:^¨*\|!·$%&/()=?¿@#~€";
            Random Rnd = new Random();
            StringBuilder SB = new StringBuilder();
            char CH;

            for (int i=1;i<=10;i++)
            {
                CH = Caracteres[Rnd.Next(0, Caracteres.Length)];
                SB.Append(CH);
            }

            return SB.ToString();

Luego de generar la contraseña vamos a proceder a modificar la contraseña del usuario en la base de datos y luego enviarla por correo electrónico

            ModificarUsuario((int)UsuarioCMB.SelectedValue, Contraseña);

Le pasamos como parámetro el código del usuario seleccionado del combo y la contraseña generada.

        private void ModificarUsuario(int CodUsu,string Contraseña)
        {
            using (SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PassMailBD.mdf;Integrated Security=True;User Instance=True"))
            {
                cnn.Open();
                string ConsultaUpdate = "UPDATE Usuario SET Contraseña=@Param1 WHERE CodUsuario=@Param2";
                SqlCommand cmd = new SqlCommand(ConsultaUpdate,cnn);
                cmd.Parameters.AddWithValue("@Param1", Contraseña);
                cmd.Parameters.AddWithValue("@Param2", CodUsu);
                cmd.ExecuteNonQuery();
            }
        }

Para enviar el mail utilizaremos el espacio de nombres:

Using System.Net.Mail;

Definimos un método llamado EnviarCorreo en el cual le pasaremos como parámetro el usuario afectado y la contraseña.

        private void EnviarCorreo(string Usuario,string Contraseña)
        {
            SmtpClient ServidorSmtp = new SmtpClient(ServidorTxt.Text,Convert.ToInt32(PuertoTxt.Text));
            ServidorSmtp.EnableSsl = true;
            ServidorSmtp.UseDefaultCredentials = false;

            if(ServiciosCMB.SelectedItem.ToString() == "Outlook")
            {
                ServidorSmtp.Credentials = new System.Net.NetworkCredential("UsuarioOutlook","ContraseñaOutlook");
            }
            else
            {
                ServidorSmtp.Credentials = new System.Net.NetworkCredential("UsuarioGmail", "ContraseñaGmail");
            }

            MailMessage Correo = new MailMessage();
            MailAddress Remitente = new MailAddress("CorreoRemitente");
            Correo.From = Remitente;
            Correo.Subject = "Nueva Contraseña";
            Correo.To.Add(CorreoElectronicoTxt.Text);
            Correo.Body = "Usuario:" + Usuario + Environment.NewLine + "Contraseña: " + Contraseña;

            ServidorSmtp.Send(Correo);
        }

Creamos un objeto de tipo SmtpClient en el cual le pasamos como parámetros el servidor y el puerto del servicio. El puerto debemos convertirlo a integer ya que es de este tipo de datos el puerto.

Debemos definir una condición dependiendo el servicio que se selecciono y crear una nueva credencial ya que no usaremos las credenciales por defecto.

Tanto para outlook como para Gmail hay que asignar como parámetros el usuario y la contraseña del servicio.

Para el cuerpo del correo electrónico definimos las siguientes propiedades:
  • From: Es el remitente del correo electrónico.
  • Subject: Asunto del correo electrónico.
  • To.Add(String): El string corresponde al correo electrónico del destinatario. En este caso, al correo electronico del usuario seleccionado en la interfaz.
  • Body: Es el cuerpo del mensaje, donde vamos a usar los datos que se pasaron como parámetro.
Por ultimo, utilizamos el método Send en el que le pasamos como parámetro el correo electrónico (MailMessage)


Fin


Código Fuente

Dropbox  

Descargar

[C#] Generar contraseña y enviarla por correo electrónico

Introducción

Puede ocurrir en una aplicación que los usuarios se olviden su contraseña para ingresar al sistema. Una de las acciones que se pueden llegar a tomar es la de generar una nueva contraseña y enviarla al correo electrónico del usuario.

Interfaz Gráfica

La interfaz gráfica es la siguiente:


NOTA: Lo ideal seria usar el correo interno de la empresa a la que pertenece el usuario. En el ejemplo utilizamos el servicio gmail y outlook a modo de ejemplo.

Por un lado tenemos los datos del servicio y por otro los datos del usuario.
Al seleccionar un servicio del combobox se va a completar los campos servidor y puerto. Lo mismo ocurre con el combobox de usuarios, al seleccionar uno de ellos, automáticamente vamos a obtener el correo electrónico del usuario.

Los datos del usuario se van a obtener desde una base de datos que va a estar adjuntada al proyecto. La estructura de la tabla Usuario es muy básica y esta compuesta por las columnas {CodUsuario,Usuario,Contraseña,CorreoElectronico}.

Código

Crearemos una nueva clase llamada Usuario en la cual vamos a definir las propiedades que van a representar a los datos del usuario.

Seguido a esto vamos a crear una funcion llamado CargarUsuario() que va a devolver una lista de usuarios

        private List CargarUsuarios()
        {
            List ListaUsuarios = new List();
            using (SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PassMailBD.mdf;Integrated Security=True;User Instance=True"))
            {
                cnn.Open();
                string ConsultaUsuario = @"SELECT CodUsuario,Usuario,Contraseña,CorreoElectronico FROM Usuario";
                SqlCommand cmd = new SqlCommand(ConsultaUsuario, cnn);
                SqlDataReader lector = cmd.ExecuteReader();

                while (lector.Read())
                {
                    UsuarioEN UnUsuario = new UsuarioEN();
                    UnUsuario.CodUsuario = lector.GetInt32(0);
                    UnUsuario.Usuario = lector[1].ToString();
                    UnUsuario.Contraseña = lector[2].ToString();
                    UnUsuario.CorreoElectronico = lector[3].ToString();

                    ListaUsuarios.Add(UnUsuario);
                }
            }
            return ListaUsuarios;
        }

Dentro del ciclo while, vamos a asignar cada dato a su respectiva propiedad.
Con este paso ya realizado, es posible poder llenar nuestro combobox de usuarios

        UsuarioCMB.DisplayMember = "Usuario";
        UsuarioCMB.ValueMember = "CodUsuario";
        UsuarioCMB.DataSource = CargarUsuarios();

Al seleccionar un item del combobox, lo que haremos es asignar la propiedad CorreoElectronico del usuario al textbox(correo electronico) de la interfaz gráfica.

        private void UsuarioCMB_SelectedIndexChanged(object sender, EventArgs e)
        {
            CorreoElectronicoTxt.Text = ((UsuarioEN)UsuarioCMB.SelectedItem).CorreoElectronico;
        }

Luego de completar los datos llego el momento de generar la nueva contraseña.

Para generar la contraseña se va a utilizar el método Next de la clase Random para obtener un indice aleatorio del string Caracteres e ir concatenando cada caracter a la cadena del StringBuilderLa longitud de la contraseña sera de 10 caracteres.

            string Caracteres = @"1234567890qwertyuiopaslñzxcvbnmQWERTYPÑLKJHGFDSXCVBNM_-.[]{};_:^¨*\|!·$%&/()=?¿@#~€";
            Random Rnd = new Random();
            StringBuilder SB = new StringBuilder();
            char CH;

            for (int i=1;i<=10;i++)
            {
                CH = Caracteres[Rnd.Next(0, Caracteres.Length)];
                SB.Append(CH);
            }

            return SB.ToString();

Luego de generar la contraseña vamos a proceder a modificar la contraseña del usuario en la base de datos y luego enviarla por correo electrónico

            ModificarUsuario((int)UsuarioCMB.SelectedValue, Contraseña);

Le pasamos como parámetro el código del usuario seleccionado del combo y la contraseña generada.

        private void ModificarUsuario(int CodUsu,string Contraseña)
        {
            using (SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PassMailBD.mdf;Integrated Security=True;User Instance=True"))
            {
                cnn.Open();
                string ConsultaUpdate = "UPDATE Usuario SET Contraseña=@Param1 WHERE CodUsuario=@Param2";
                SqlCommand cmd = new SqlCommand(ConsultaUpdate,cnn);
                cmd.Parameters.AddWithValue("@Param1", Contraseña);
                cmd.Parameters.AddWithValue("@Param2", CodUsu);
                cmd.ExecuteNonQuery();
            }
        }

Para enviar el mail utilizaremos el espacio de nombres:

Using System.Net.Mail;

Definimos un método llamado EnviarCorreo en el cual le pasaremos como parámetro el usuario afectado y la contraseña.

        private void EnviarCorreo(string Usuario,string Contraseña)
        {
            SmtpClient ServidorSmtp = new SmtpClient(ServidorTxt.Text,Convert.ToInt32(PuertoTxt.Text));
            ServidorSmtp.EnableSsl = true;
            ServidorSmtp.UseDefaultCredentials = false;

            if(ServiciosCMB.SelectedItem.ToString() == "Outlook")
            {
                ServidorSmtp.Credentials = new System.Net.NetworkCredential("UsuarioOutlook","ContraseñaOutlook");
            }
            else
            {
                ServidorSmtp.Credentials = new System.Net.NetworkCredential("UsuarioGmail", "ContraseñaGmail");
            }

            MailMessage Correo = new MailMessage();
            MailAddress Remitente = new MailAddress("CorreoRemitente");
            Correo.From = Remitente;
            Correo.Subject = "Nueva Contraseña";
            Correo.To.Add(CorreoElectronicoTxt.Text);
            Correo.Body = "Usuario:" + Usuario + Environment.NewLine + "Contraseña: " + Contraseña;

            ServidorSmtp.Send(Correo);
        }

Creamos un objeto de tipo SmtpClient en el cual le pasamos como parámetros el servidor y el puerto del servicio. El puerto debemos convertirlo a integer ya que es de este tipo de datos el puerto.

Debemos definir una condición dependiendo el servicio que se selecciono y crear una nueva credencial ya que no usaremos las credenciales por defecto.

Tanto para outlook como para Gmail hay que asignar como parámetros el usuario y la contraseña del servicio.

Para el cuerpo del correo electrónico definimos las siguientes propiedades:
  • From: Es el remitente del correo electrónico.
  • Subject: Asunto del correo electrónico.
  • To.Add(String): El string corresponde al correo electrónico del destinatario. En este caso, al correo electronico del usuario seleccionado en la interfaz.
  • Body: Es el cuerpo del mensaje, donde vamos a usar los datos que se pasaron como parámetro.
Por ultimo, utilizamos el método Send en el que le pasamos como parámetro el correo electrónico (MailMessage)


Fin


Código Fuente

Dropbox  

Descargar

[C#] Generar contraseña y enviarla por correo electrónico

Introducción

Puede ocurrir en una aplicación que los usuarios se olviden su contraseña para ingresar al sistema. Una de las acciones que se pueden llegar a tomar es la de generar una nueva contraseña y enviarla al correo electrónico del usuario.

Interfaz Gráfica

La interfaz gráfica es la siguiente:


NOTA: Lo ideal seria usar el correo interno de la empresa a la que pertenece el usuario. En el ejemplo utilizamos el servicio gmail y outlook a modo de ejemplo.

Por un lado tenemos los datos del servicio y por otro los datos del usuario.
Al seleccionar un servicio del combobox se va a completar los campos servidor y puerto. Lo mismo ocurre con el combobox de usuarios, al seleccionar uno de ellos, automáticamente vamos a obtener el correo electrónico del usuario.

Los datos del usuario se van a obtener desde una base de datos que va a estar adjuntada al proyecto. La estructura de la tabla Usuario es muy básica y esta compuesta por las columnas {CodUsuario,Usuario,Contraseña,CorreoElectronico}.

Código

Crearemos una nueva clase llamada Usuario en la cual vamos a definir las propiedades que van a representar a los datos del usuario.

Seguido a esto vamos a crear una funcion llamado CargarUsuario() que va a devolver una lista de usuarios

        private List CargarUsuarios()
        {
            List ListaUsuarios = new List();
            using (SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PassMailBD.mdf;Integrated Security=True;User Instance=True"))
            {
                cnn.Open();
                string ConsultaUsuario = @"SELECT CodUsuario,Usuario,Contraseña,CorreoElectronico FROM Usuario";
                SqlCommand cmd = new SqlCommand(ConsultaUsuario, cnn);
                SqlDataReader lector = cmd.ExecuteReader();

                while (lector.Read())
                {
                    UsuarioEN UnUsuario = new UsuarioEN();
                    UnUsuario.CodUsuario = lector.GetInt32(0);
                    UnUsuario.Usuario = lector[1].ToString();
                    UnUsuario.Contraseña = lector[2].ToString();
                    UnUsuario.CorreoElectronico = lector[3].ToString();

                    ListaUsuarios.Add(UnUsuario);
                }
            }
            return ListaUsuarios;
        }

Dentro del ciclo while, vamos a asignar cada dato a su respectiva propiedad.
Con este paso ya realizado, es posible poder llenar nuestro combobox de usuarios

        UsuarioCMB.DisplayMember = "Usuario";
        UsuarioCMB.ValueMember = "CodUsuario";
        UsuarioCMB.DataSource = CargarUsuarios();

Al seleccionar un item del combobox, lo que haremos es asignar la propiedad CorreoElectronico del usuario al textbox(correo electronico) de la interfaz gráfica.

        private void UsuarioCMB_SelectedIndexChanged(object sender, EventArgs e)
        {
            CorreoElectronicoTxt.Text = ((UsuarioEN)UsuarioCMB.SelectedItem).CorreoElectronico;
        }

Luego de completar los datos llego el momento de generar la nueva contraseña.

Para generar la contraseña se va a utilizar el método Next de la clase Random para obtener un indice aleatorio del string Caracteres e ir concatenando cada caracter a la cadena del StringBuilderLa longitud de la contraseña sera de 10 caracteres.

            string Caracteres = @"1234567890qwertyuiopaslñzxcvbnmQWERTYPÑLKJHGFDSXCVBNM_-.[]{};_:^¨*\|!·$%&/()=?¿@#~€";
            Random Rnd = new Random();
            StringBuilder SB = new StringBuilder();
            char CH;

            for (int i=1;i<=10;i++)
            {
                CH = Caracteres[Rnd.Next(0, Caracteres.Length)];
                SB.Append(CH);
            }

            return SB.ToString();

Luego de generar la contraseña vamos a proceder a modificar la contraseña del usuario en la base de datos y luego enviarla por correo electrónico

            ModificarUsuario((int)UsuarioCMB.SelectedValue, Contraseña);

Le pasamos como parámetro el código del usuario seleccionado del combo y la contraseña generada.

        private void ModificarUsuario(int CodUsu,string Contraseña)
        {
            using (SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PassMailBD.mdf;Integrated Security=True;User Instance=True"))
            {
                cnn.Open();
                string ConsultaUpdate = "UPDATE Usuario SET Contraseña=@Param1 WHERE CodUsuario=@Param2";
                SqlCommand cmd = new SqlCommand(ConsultaUpdate,cnn);
                cmd.Parameters.AddWithValue("@Param1", Contraseña);
                cmd.Parameters.AddWithValue("@Param2", CodUsu);
                cmd.ExecuteNonQuery();
            }
        }

Para enviar el mail utilizaremos el espacio de nombres:

Using System.Net.Mail;

Definimos un método llamado EnviarCorreo en el cual le pasaremos como parámetro el usuario afectado y la contraseña.

        private void EnviarCorreo(string Usuario,string Contraseña)
        {
            SmtpClient ServidorSmtp = new SmtpClient(ServidorTxt.Text,Convert.ToInt32(PuertoTxt.Text));
            ServidorSmtp.EnableSsl = true;
            ServidorSmtp.UseDefaultCredentials = false;

            if(ServiciosCMB.SelectedItem.ToString() == "Outlook")
            {
                ServidorSmtp.Credentials = new System.Net.NetworkCredential("UsuarioOutlook","ContraseñaOutlook");
            }
            else
            {
                ServidorSmtp.Credentials = new System.Net.NetworkCredential("UsuarioGmail", "ContraseñaGmail");
            }

            MailMessage Correo = new MailMessage();
            MailAddress Remitente = new MailAddress("CorreoRemitente");
            Correo.From = Remitente;
            Correo.Subject = "Nueva Contraseña";
            Correo.To.Add(CorreoElectronicoTxt.Text);
            Correo.Body = "Usuario:" + Usuario + Environment.NewLine + "Contraseña: " + Contraseña;

            ServidorSmtp.Send(Correo);
        }

Creamos un objeto de tipo SmtpClient en el cual le pasamos como parámetros el servidor y el puerto del servicio. El puerto debemos convertirlo a integer ya que es de este tipo de datos el puerto.

Debemos definir una condición dependiendo el servicio que se selecciono y crear una nueva credencial ya que no usaremos las credenciales por defecto.

Tanto para outlook como para Gmail hay que asignar como parámetros el usuario y la contraseña del servicio.

Para el cuerpo del correo electrónico definimos las siguientes propiedades:
  • From: Es el remitente del correo electrónico.
  • Subject: Asunto del correo electrónico.
  • To.Add(String): El string corresponde al correo electrónico del destinatario. En este caso, al correo electronico del usuario seleccionado en la interfaz.
  • Body: Es el cuerpo del mensaje, donde vamos a usar los datos que se pasaron como parámetro.
Por ultimo, utilizamos el método Send en el que le pasamos como parámetro el correo electrónico (MailMessage)


Fin


Código Fuente

Dropbox  

Descargar

No hay comentarios. :

Publicar un comentario