JavaMail: Enviar correos electrónicos desde Java

7
2634
GARD Pro Not Registered
Para este post estaremos estudiando el uso de la librería JavaMail en un sencillo proyecto con una aplicación que contará con un par de ventanas desde las cuales se escribirá un mensaje y será enviado a una dirección de correo electrónico.

 

El lenguaje de programación Java es, sin duda, uno de los más completos y poderosos del mundo. Podríamos asegurar que, cualquier posibilidad que nos imaginemos es posible lograrla en Java.

Hoy traigo para ustedes la librería JavaMail (click para descargar), la cual permite enviar y recibir correos electrónicos desde Java.

Lo que haremos será crear un proyecto con una clase y dos frames, en los cuales se colocará la ventana “LogIn” donde se introducirá el correo electrónico y la contraseña del correo electrónico que se va a usar (preferiblemente, Gmail) y la ventana donde estarán los campos para el destinatario, asunto y mensaje.

Sin título-2

Sin título-3 copia
Ventana LogIn
JavaMail
Ventana que contendrá el mensaje a enviar

Ahora vamos con la programación. Primero la clase JavaMail. Aquí solo se necesita instanciar la ventana LogIn para que cuando se inicie la ejecución lo primero que suceda es que se pida el usuario y la contraseña de lo que será la cuenta que enviará el correo electrónico.

GARD Pro Not Registered

Netbeans

En la ventana LogIn, al presionar el botón Aceptar se guardará el contenido del jTextField y del jPasswordField donde está el usuario y la contraseña, respectivamente.

Sin título-4

 

GARD Pro Not Registered

El botón Cancelar hará que la ventana se cierre y se pare la ejecución.

Se ha instanciado el jFrame con el contenido del mensaje a través del objeto ventana, lo que permite llamar las variables Username y PassWord, que fueron declaradas como variables públicas y estáticas. Veamos la declaración de variables y lo que necesitamos importar desde la librería JavaMail a la clase Window.

Sin título-5

 

Vemos que solo se necesita declarar Username y PassWord como variables públicas y estáticas ya que serán las únicas cuyo valor será modificado por otras clases. Las otras variables contendrán el mensaje a enviar, el destinatario y el “asunto” del mensaje.

Ahora veamos la programación de los botones y algunas propiedades que se deben setear para que el TextArea funcione como queremos.

Sin título-6

 

Aquí es donde se empieza a utilizar la librería JavaMail. Vamos con el método SendMail. Es el que hace posible que se envíe el correo. Basta con copiar y pegar el siguiente código.

 

Aquí se muestra la imagen de cómo debería quedar:

Sin título-8

Con esto estamos listos para ejecutar la aplicación y enviar correos electrónicos.

Si desea descargar el archivo que contiene el proyecto de Netbeans utilizado para este post, lo puede descargar directamente de aquí:

Descargar Proyecto Netbeans

Por último, un video donde se muestra el programa funcionando. 

Si queda alguna duda sobre el funcionamiento de este proyecto, no duden en preguntar en los comentarios.

Saludos.

 

  • Darley Acosta

    Cordial saludo!

    Tengo problema con este programa en java, el cual me genera unos errores en el archivo PacienteControl.java, si alguien me puede ayudar, le agradecería muchísimo..!

    package controlador;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.SimpleDateFormat;

    public class PacienteControl implements ActionListener
    {
    vista.RegPacienteInternalFrame pacienteVista;
    modelo.Paciente pacienteModelo;
    modelo.GestorPaciente gestorPacienteModelo;

    public PacienteControl (vista.RegPacienteInternalFrame pacienteVista)
    {
    this.pacienteVista = pacienteVista;
    gestorPacienteModelo= new modelo.GestorPaciente();

    }

    @Override
    public void actionPerformed(ActionEvent e) {
    if(e.getSource().equals(pacienteVista.RegistrarBtn))
    {
    String identificacion=pacienteVista.IdentificacionTxt.getText();
    String nombres=pacienteVista.NombresTxt.getText();
    String apellidos=pacienteVista.ApellidosTxt.getText();
    SimpleDateFormat formato = new SimpleDateFormat (“dd/MM/yyyy”);
    String fechaNacimiento=formato.format(pacienteVista.FechaNacimientoDtc.getDate());
    String sexo=null;

    if(pacienteVista.MasculinoOpt.isSelected())
    sexo=”m”;
    else
    sexo=”f”;
    pacienteModelo=new modelo.Paciente(identificacion,nombres, apellidos,fechaNacimiento, sexo);
    gestorPacienteModelo.registrarPaciente (pacienteModelo);
    }
    if(e.getSource().equals(pacienteVista.NuevoBtn))
    {
    pacienteVista.IdentificacionTxt.setText(null);
    pacienteVista.NombresTxt.setText(null);
    pacienteVista.ApellidosTxt.setText(null);
    pacienteVista.FechaNacimientoDtc.setDate(null);
    pacienteVista.MasculinoOpt.setSelected(false);
    pacienteVista.FemeninoOpt.setSelected(false);
    pacienteVista.IdentificacionTxt.requestFocus();

    }
    }
    }

  • Pool Fernando CV

    el proyecto sale sin errores pero cuando envío el correo a una cuenta de gmail me saltan muchos errores, me dice que el puerto no es el correcto

    • Antony García González

      Debes verificar los datos del server de gmail

  • Jose Vladimir Matos Marte

    Que propiedad del boton es esa que le da esa apariencia lisa? porque normalmente los botones son un poco diferentes!!!

    • Antony García González

      Depende del sistema operativo en el que se ejecuta el software

    • Muse

      Tienes que navegar entre las propiedades del button, si mal no recuerdo es border, ya que por defecto los botones se ven algo brillosos por así decirlo.

  • Benjamin Mendiola Reynoso

    hola que tal, estoy haciendo un sistema y utilice su código para enviar correos, pero al presionar el botón enviar me marca el siguiente error:

    Exception in thread “AWT-EventQueue-0” java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;

    nested exception is:

    java.net.SocketException: Permission denied: connect

    por favor necesito terminarlo, espero su respuesta gracias.