JavaMail: Enviar correos electrónicos desde Java

20
43600

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.

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

 

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.

 

0 0 votes
Article Rating
Suscríbete
Notify of
guest

20 Comments
newest
oldest most voted
Inline Feedbacks
View all comments
Odanny
Odanny
3 years ago

Muchas gracias por el aporte, fácil y útil.
Gracias por adjuntar el proyecto, hace una gran diferencia!

Max
Max
3 years ago

hola, me tiro un error de:
Exception in thread «AWT-EventQueue-0» java.lang.NoClassDefFoundError: javax/activation/DataHandler
at javamail.Window.SendMail(Window.java:37)
at javamail.Window.jButtonEnviarActionPerformed(Window.java:189)
at javamail.Window.access$000(Window.java:13)
at javamail.Window$2.actionPerformed(Window.java:97)
la linea 37 es justo despues del try en lo que es el Mime:
try {

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(Username));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(To));
message.setSubject(Subject);
message.setText(Mensage);
Lo q busque del error NoClassDefFoundError es como q compila pero cuando lo ejecuto no encuentra el archivo de clase.Prove cambiando las api JavaMail 15 por casa y 16 pero sigue el mismo error.
Tambien descargue el que subiste pero me sigue tirando el mismo error.

Francisco Hernandez
Francisco Hernandez
3 years ago

En mi caso, no envia el correo y la consola no lanza ningun error

jose
jose
3 years ago

Quisiera saber de que es la variable «ventana»

moises
moises
3 years ago

a mi no me funciono a la hora de mandar el mensaje me manda un error no se porque si tengo la librería

Alvaro Sánchez
Alvaro Sánchez
3 years ago

Si quisiera enviar un correo pero es de tipo empresarial, osea, a través de outlook, que debo cambiar en el codigo ya que según estuve leyendo el puerto puede ser el mismo pero aun así no me funciona. ya intenté cambiando la linea que contiene el host pero no me funciona

jose
jose
4 years ago

quiero saber los nombres de las variables de los botones

tigreci
tigreci
4 years ago

La duda es la siguiente: como verifico si me contestan el correo, porque se pierde trazabilidad, es decir yo envio el email ejecuto el saveChange para poder recuperar el Message-id, pero el Message-id que obtengo del header es distinto al que llega a la cuenta de destino con lo que aunque me respondan pierdo la trazabilidad porque soy incapaz de relacionar la respuesta con el correo original. ejemplo de message-id y llega algo como esto es decir coincide a la derecha del @ pero a la izquierda lo cambia, con lo que no tengo forma de saber a cual me… Read more »

Gold D Roger
Gold D Roger
4 years ago

Hola!, tengo una duda, tengo un sitio que manda correos electrónicos , mi pregunta es al momento de enviar el correo pido al usuario capturar su CORREO y CONTRASEÑA, habría forma de autentificar estos datos antes de enviar el correo en si?.
Me gustaría que al momento de ya capturar todo y empieza a funcionar la clase, y detectara que el CORREO y/o CONTRASEÑA, no son los correctos devuelva un error! y no siga su proceso!

@Brandford87
@Brandford87
5 years ago

Agradecido! Funcionó perfectamente, lo estoy integrando a mis proyectos.

Darley Acosta
Darley Acosta
5 years ago

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);… Read more »

Pool Fernando CV
Pool Fernando CV
6 years ago

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
Antony García González
6 years ago

Debes verificar los datos del server de gmail

Jose Vladimir Matos Marte
Jose Vladimir Matos Marte
6 years ago

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

Muse
Muse
6 years ago

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
Benjamin Mendiola Reynoso
7 years ago

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.