Enviar emails desde Java con Jakarta Mail

Enviar emails desde Java con Jakarta Mail

Enviar emails desde Java con Jakarta Mail

Hola y bienvenidos de nuevo al blog de Espai. Hoy vamos a ver cómo enviar emails desde Java con Jakarta Mail, que es una librería estupenda que nos permitirá automatizar tareas que tengan que ver con el correo electrónico. Ya sin más preámbulos, vamos al lío.

 

Crear el proyecto Eclipse

 

Vamos a usar Eclipse como editor, y como partimos desde 0 habrá que crear el proyecto vacío. Podemos hacer click en “Create a Java Project” o File->new -> Java Project.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

En este punto, Eclipse nos pregunta como se llamará el proyecto. En mi caso he puesto “Emails” pero puedes usar cualquier nombre, mientras comience con texto y no tenga caracteres especiales como $ o #.

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

Queremos el proyecto vacío (por el momento, asi que simplemente pulsamos en “Finish”.

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

Vamos ahora a crear la clase que contendrá nuestro código, para eso abrimos el proyecto pulsando en el icono > que hay debajo de “package Explorer”.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

Creamos una nueva clase, que llamaremos…

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

…Emails. Aquí dentro irá nuestro código, aunque por el momento Eclipse nos la creará vacía. Pulsamos en “Finish”.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

 

Añadir librería Jakarta Mail

 

Ahora necesitamos añadir la librería de Jakarta Mail, la que realmente hará el envío de los mensajes. Sigue el paso a paso que verás a continuación.

 

Creamos una nueva carpeta (lib) donde guardaremos la librería.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

 

Copiamos y pegamos el fichero .jar que podrás descargar en la parte inferior del artículo.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

 

El resultado debería ser éste:

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

Ahora nos falta avisar a Eclipse de que es una librería que necesita utilizar, así:

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

 

Si aparece en Referenced Libraries, lo hemos hecho bien.

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

 

Configuración de la cuenta de correo

 

Para enviar los emails, necesitamos una cuenta de correo que nos permita utilizar el servidor SMTP. Google nos ofrece esta posibilidad con un máximo de 100 envíos diarios, pero para pruebas nos será suficiente. En este caso he creado una cuenta que se llama jordi.pruebas.asdfg@gmail.com.

 

Además, deberemos activar una opción en la configuración para que nos permita enviar correos desde una aplicación externa, para eso vamos a la esquina superior derecha y pulsamos “Gestionar tu cuenta de Google”.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

 

Pulsamos en el menú izquierdo “Seguridad”

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

En la sección “Acceso de aplicaciones poco seguras” pulsamos en “Activar acceso”. Aseguraros de usar un email que creéis para pruebas, no uséis el vuestro propio.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

Pulsamos en el botón y lo activamos. Ahora ya podemos enviar emails dese nuestra aplicación.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

Recibiremos un email de “Alerta de seguridad crítica”. No os preocupéis, es Google avisándonos de que hemos activado esta opción. Bueno, preocuparos si no lo habéis hecho vosotros eso si!

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

 

Código del programa

Aquí tenemos el código que nos permitirá enviar el email. Podéis descargarlo también en el final del artículo, y pegar el contenido en nuestra clase Emails vacía.

Si os fijáis bien, hay una sección entre la línea 17 y 24 donde se configuran el acceso a nuestra cuenta Google. Necesitaréis cambiar donde pone “from”, “username” y “password”. Las 2 primeras serán vuestra dirección de email, la que habéis creado para priebas. La tercera es la contraseña para acceder a ese correo, os recomiendo que no uséis la misma contraseña que usáis en el día a día.

 

El punto donde se envía el email es la línea 46, donde hacemos “e.enviar”. Si queréis que aparezca un titulo o mensaje diferente, lo podéis cambiar ahí. Ahora ya podemos ejecutar nuestro programa, con el botón “play” o ctrl+F11.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

Resultado final

 

Y aquí tenemos el resultado! El primer mensaje enviado desde nuestra propia aplicación.

En remitente pone “yo” porque hemos enviado el email a la misma cuenta de pruebas, si queréis podéis probar a enviarlo a una cuenta diferente y veréis que igualmente llega.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

Entrando en el mensaje, podemos ver a fecha y hora de envío y el cuerpo del mensaje.

 

Enviar emails desde Java con Jakarta Mail Escuela Espai

 

Y hasta aquí el artículo de hoy! Espero que os haya sido interesante, y cualquier duda son bienvenidos los comentarios!

Hasta la próxima!

 

material para el artículo

Emails.java (click para descargar)

Librería Jakarta Mail (click para descargar)

 

10Comentarios

  • Kevin Larriega
    06/06/2020

    Me sale este error
    SEVERE:
    java.lang.Error: Unresolved compilation problems:
    Session cannot be resolved to a type
    Session cannot be resolved
    MimeMessage cannot be resolved to a type
    MimeMessage cannot be resolved to a type
    InternetAddress cannot be resolved to a type
    Message cannot be resolved to a variable
    Transport cannot be resolved to a type
    MessagingException cannot be resolved to a type

    at login.sendEmailControll.enviarEmail(sendEmailControll.java:65)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.zkoss.zk.ui.select.Selectors$ComposerEventListener.onEvent(Selectors.java:687)
    at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:3184)
    at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:3154)
    at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:3096)
    at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138)
    at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.process0(EventProcessingThreadImpl.java:545)
    at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.run(EventProcessingThreadImpl.java:470)
    Trabajo con un framework zk, espero que eso no sea el problema

  • Enrique
    08/05/2020

    Hola
    Gracias por el código, lo ejecute con una jvm 1.8.0_241 y la librería que compartiste , me da el siguiente error
    javax.mail.MessagingException: Could not convert socket to TLS;
    nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    Sabrás que podrá generar este error ?
    Desde ya gracias por tu aporte .

  • Luis
    06/05/2020

    Me da un error y no encuentro el por que 🙁
    java.lang.NoClassDefFoundError: com/sun/activation/registries/LogSupport

  • Roman
    13/04/2020

    Muchas gracias Jordi

    la librería Javax.mail.jar ya no me funcionaba. daba error

    Gracias

  • gemma
    29/01/2020

    sin gustarme la programación y reconociendo que muchas cosas no las entiendo porque soy inexperta, es una exposición muy bien explicada.. gracias Jordi

Escribe un comentario