Envía Email desde Java versión 2.0

Bienvenid@ lector/a, en esta nueva entrada veremos cómo crear un programa que envié correos desde una cuenta Gmail o Hotmail (Outlook), este programa será una versión modificada de una ya realizada, para ver la versión 1.0 Dirigirse al siguiente LINK.

Cabe recalcar que la versión 1.0 de este programa consta de las siguientes funcionalidades.

  • Envía correo a cualquier destinatario desde un correo Host GMAIL.
  • Se envía correo a un solo destinatario sin copia a otro contacto o copia oculta.
  • El correo solo es de texto sin adjuntos.


Ahora la versión 2.0 constara de funcionalidades un poco más pulidas agregando más funcionalidades para que sea más funcional. Esta versión modificada tendrá las siguientes funcionalidades.

  • El origen del correo puede ser desde el Host de GMAIL y HOTMAIL (Outlook).
  • Múltiples destinatario.
  • Múltiples destinatarios con Copia y Copia Oculta.
  • Múltiples adjuntos.
  • El cuerpo del correo puede contener Imágenes y texto.
Librerías necesarios para ejecutar el programa, debes agregarlas antes de crear el proyecto o descargarlo.
Librerías:
  1. activation.jar
  2. mail.jar


Empezaremos con la interfaz gráfica de la aplicación que varía un poco con la vista en la versión original, esta nueva interfaz tiene como objetivo que sea más intuitiva y sencilla de usar, para ello agregaremos campos para dirección origen correo, campo de direcciones de destinatarios agregando igualmente otros dos campos para enviar copias y copias ocultas a otras direcciones de correo electrónico. Más abajo se encontrara el campo donde puedes agregar el mensaje que desees enviar mediante el correo. En la parte inferior se encontrara los botones de Enviar, en el cual le solicitara la contraseña del correo de origen. Además el botón de adjuntar da la posibilidad de agregar cuantos archivos adjuntos desee teniendo en consideración que los servidores de correo no soportan archivos que la suma de sus pesos superen los 25 MB.


La interfaz gráfica que implementaremos quedara como muestra la Imagen 1.


Imagen 1. Interfaz de la aplicación.


Como se ve en la Imagen 2 se pueden agregar todos los campos antes mencionados, sin embargo no es necesario que los campos CC y CCO tengan algún contenido es decir, estos campos no son obligatorios. Sin embargo debe de existir al menos un destinatario del correo, de lo contrario el programa nos informara de un error al enviar el correo, cabe destacar que tanto los campos de destinatarios, CC y CCO pueden contener más de una dirección de correo.

Imagen 2. Interfaz con datos.

Si usted desea agregar archivos adjuntos al correo, tendrá la posibilidad de agregar tanto archivos quiera, eso sí, debe considerar que el servidor de correo solo soporta archivos con un peso menor a 25 MB, esto quiere decir que la suma de los pesos de los archivos que adjunte están sujeto a esta regla. Esta aplicación le permite la selección de múltiples archivos, no importa de lugar donde se encentren en su equipo. 

Imagen 3. Seleccionado archivos para adjuntar.

Una vez adjuntados los archivos que desee adjuntar, podrá verlos en la parte inferior del programa, cabe recalcar que este solo mostrara los nombres de los archivos, sin la posibilidad de eliminar uno de esos, sin embargo puede borrar todo los archivos adjuntos con el botón X, que se encuentra al lado derecho del visor de archivos adjuntos tal como se muestra en la imagen 4.

Imagen 4. Muestra los archivos adjuntos.

Al momento de enviar el correo, se le pedirá la contraseña del correo de origen como medida de autenticación, cabe recalcar que siempre que envié un correo nuevo debe de realizar esta acción. Sin embargo se puede modificar el código fuente para enviar correos desde un correo predeterminado. En Imagen 5 se puede apreciar la petición de contraseña.



 Imagen 5. Requiere contraseña para enviar.

Cuando el correo se envió correctamente, este muestra un mensaje de estado en el cual indica que fue enviado correctamente.

Imagen 6. Muestra mensaje de envió correcto.

En caso contrario se nos notificara que al enviar el correo Ocurrió un error al momento de enviar el correo, esto puede ocurrir en diferentes casos.
  • Se ingresó mal la contraseña.
  •  Algún destinatario está mal escrito.
Imagen 7. Mensaje de error.


A continuación se mostraran algunos fragmentos de código que pueden ser de interés para ustedes los lectores.

Clase Envía Email

Este fragmento de código muestra la configuración de las propiedades de Java Mail, en el cual se ingresan los nombres de los host de origen en este caso Gmail, Hotmail. Por otro lado se identifican los puertos por los cuales se enviran los correros, además existe una línea de código donde se puede identificar si el correo pertenece a un correo Gmail o Hotmail.

1:      Properties props = new Properties(); //propiedades a agragar  
2:      props.put("mail.smtp.user", this.origen); //correo origen  
3:      props.put("mail.smtp.port", "587"); //puesto de salida  
4:      props.put("mail.smtp.starttls.enable", "true"); //inicializar el servidor  
5:      props.put("mail.smtp.auth", "true"); //autentificacion   
6:      String identifica = origen.substring(  
7:      origen.indexOf("@") + 1,  
8:      origen.indexOf("@") + 6);  
9:      if (identifica.equals("gmail")) {  
10:           props.put("mail.smtp.host", "smtp.gmail.com"); //tipo de servidor        
11:           props.put("mail.smtp.socketFactory.port", "465"); //activar el puerto  
12:           props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");  
13:           props.put("mail.smtp.socketFactory.fallback", "false");  
14:      } else {  
15:           props.put("mail.smtp.host", "smtp.live.com"); //tipo de servidor  
16:      } 

En el siguiente fragmento se puede identificar si el correo lleva o no archivos adjuntos, en caso de que contenga algún archivo adjunto se realiza un proceso de recorrido de la lista de adjuntos agregándolos al bodyPart del correo.

1:  if (adjunto != null) {  
2:          for (Archivo_Class adjunto1 : adjunto) {  
3:            BodyPart adj = new MimeBodyPart();  
4:            adj.setDataHandler(new DataHandler(new FileDataSource(adjunto1.ruta)));   
5:            adj.setFileName(adjunto1.nombre);  
6:            multiParte.addBodyPart(adj);  
7:          }   
8:        }  


A continuación se puede ver el proceso de agregar los múltiples destinatarios, además del proceso de agregar direcciones de correos donde irán las copias y copias ocultas.

1:        //AGREGAR MULTIPLES DESTINATARIOS  
2:        for (int i = 0; i < this.destino.get(0).size(); i++) {  
3:          msg.addRecipient(Message.RecipientType.TO,  
4:              new InternetAddress(  
5:                  this.destino.get(0).get(i)  
6:              ));  
7:        }  
8:        //AGREGAR MULTIPLES CC  
9:        if (this.destino.get(1) != null) {  
10:          for (int i = 0; i < this.destino.get(1).size(); i++) {  
11:            msg.addRecipient(Message.RecipientType.CC,  
12:                new InternetAddress(  
13:                    this.destino.get(1).get(i)  
14:                ));  
15:          }  
16:        }  
17:        //AGREGAR MULTIPLES CCO  
18:        if (this.destino.get(2) != null) {          
19:          for (int i = 0; i < this.destino.get(2).size(); i++) {  
20:            msg.addRecipient(Message.RecipientType.BCC,  
21:                new InternetAddress(  
22:                    this.destino.get(2).get(i)  
23:                ));//agrega el destinatario   
24:          }  
25:        } 


Aquí se puede identificar claramente cómo se agregan tanto el texto del correo como los archivos adjuntos.

1:        BodyPart texto = new MimeBodyPart();  
2:        texto.setText(this.cuerpo);  
3:        msg.setSubject(this.asunto);  
4:        msg.setFrom(new InternetAddress(this.origen));  
5:        multiParte.addBodyPart(texto);  
6:        msg.setContent(multiParte);  
7:        Transport.send(msg);  


Lado interfaz

Por el lado de la interfaz, se puede apreciar la creación y despliegue del JFileChooser, que es un buscador de archivos, se puede apreciar que se habilita la multiselección de archivos.

1:      JFileChooser fileChooser = new JFileChooser();  
2:      fileChooser.setCurrentDirectory(  
3:          new File(System.getProperty("user.home"))  
4:      );  
5:      fileChooser.setMultiSelectionEnabled(true);  


Resultados
Imagen 9. Bandeja entrada Gmail.



Imagen 10. Bandeja entrada Hotmail (Outlook).



Imagen 11. Bandeja entrada Yahoo.


Si quieres descargar el proyecto ingresa a este LINK

 Este sitio fue creado en primera instancia como un lugar donde ir acumulando información y/o apuntes que considere de utilidad para un futuro cercano, pero a medida que ha avanzado el tiempo este lugar se a vuelto un punto de encuentro para muchas personas que se están iniciando en el mundo de la programación, es por eso que si estás leyendo esto estas invitado a participar en de esta comunidad que día a día va creciendo. Si estás dispuesto a cooperar te sugiero que dejes tus inquietudes, dudas o aportes en la caja de comentario de cualquiera de las entradas del blog o haciendo directamente desde el formulario de contacto que puede encontrar en la página de inicio y responderé a la brevedad.

Comentarios

Entradas más populares de este blog

Convertir decimal a binario, octal y hexadecima

Juego del gato

Mostrar texto en ventana pygame