En este nuevo artículo, explico cómo desarrollar una
aplicación web sencilla en la plataforma Java
EE 7 con el IDE Netbeans 8.1, el Framework JSF y la API JavaMail que nos permitirá enviar
correo electrónico en Java con el protocolo de red SMTP (protocolo para transferencia simple de correo) utilizado
para el intercambio de mensajes de correo electrónico entre computadoras u
otros dispositivos utilizando el TLS (Transport
Layer Security) que proporciona comunicación criptográfica de forma segura y
autenticada.
La API JavaMail es una plataforma independiente
que contienen un paquete que ofrece una interfaz de nivel de aplicación utilizados
para enviar y recibir correo electrónico, sea por SMTP que se utiliza para enviar Email, POP3
(Protocolo de oficina correo) es el estándar para la recepción de mensajes
de correo electrónico, IMAP
(Protocolo de acceso a mensajes de Internet) es una alternativa a POP3. Maneja una
interfaz de proveedor de servicios (SP) que habla lenguajes específicos de
protocolos.
Configuración del entorno
Tenemos que descargar e instalar los softwares
siguientes:
Software
|
Link de Descarga
|
Netbeans 8.1
|
https://netbeans.org/downloads/8.1/
|
GlassFish 4.1
|
https://glassfish.java.net/download.html
|
Java SE 7
|
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
|
El Primer paso, creamos
un nuevo proyecto en Netbeans, “New
Project”=> Categories =>“Maven”
y Project=> “Web Application” como
se muestra en la (Figura 1).
Figura 1 Maven Web Application
Presionamos Siguientes y aparecerá otra
pantalla como se muestra en la (Figura 2)
Figura 2 Nombre y Ubicación
Ingresamos del nombre y la ubicación de la
aplicación, para este caso el nombre del proyecto se llamara “JavaMails”.
Las siguientes
propiedades de Maven se enumeran:
- Artefacto Id: Esto no se puede cambiar. Es el nombre de su proyecto.
- ID de grupo: Esto se puede editar según sea necesario. Esto establece el paquete básico Para el proyecto.
- Versión: Esto no tiene que ser cambiado.
- Proyecto: Esta es la última propiedad que vamos a utilizar para establecer la raíz paquete para todas las clases de Java en el proyecto.
Ahora que nos hemos fijado el nombre y la ubicación del
proyecto, haga clic en Siguiente. Esto nos lleva al cuadro de diálogo
Configuración. Aquí es donde nos fijamos el servidor de aplicaciones y Java
Enterprise Edition (EE) versión que vamos a utilizar para el proyecto, que para este
ejemplo utilizamos el servidor de GlassFish Server que trae por defecto el IDE
de Netbeans y la versión del Java EE 7 Web como se muestra en la (Figura 3).
a continuación, el objeto de transporte intenta conectarse a la SMTP servidor utilizando las credenciales sugeridas (la dirección del servidor SMTP, el número de puerto que acepta conexiones SMTP, el usuario y la contraseña) para pasar la autenticación en el servidor.
Si la conexión es aceptada por el servidor SMTP, el email se envía a través del comnado send. Por último, se cierra el servicio de transporte al invocar el comando close:
Figura
3 Configuración
Una vez que hemos establecido la configuración del
proyecto, podemos finalizar la creación de la misma. NetBeans nos presenta con
una vista del proyecto que contiene nuestro proyecto recién creado.
Ahora que hemos creado
con éxito el proyecto, tenemos que cambiar el proyecto propiedades para que
añada el framework JSF.
Agregamos el archivo de
JSF Faces Configuración, presionamos clic derecho sobre el proyecto como se
muestra en la (Figura 4) “New”=> “JSF Faces Configuration”.
Figura 4 New JSF Faces Configuración
En la (Figura 5) Ingresamos del nombre que le vamos a colocar al archivo
JSF Faces Configuración, para este caso dejamos el nombre por defecto “faces-config” y presionamos el botón Terminar.
Figura
5 New JSF Faces Configuración
Verificamos que se encuentre en nuestro proyecto el Framework Java Server Faces, presionamos clic
derecho en nuestro proyecto y seleccionamos propiedades la opción Frameworks
como se muestra en la (Figura 6).
Figura 6 Propiedades del Proyecto Framework
El siguiente paso es
dirigirnos al explorador del proyecto y ubicar el archivo “POM.XML” y agregamos esta dependencia como se muestra en la
(Figura 7) la API JavaMail proporciona clases que modelan un sistema de correo. El
paquete javax.mail define las clases
que son comunes a todos los sistemas de correo. El paquete javax.mail.internet define las clases que son específicos de los
sistemas de correo basados en estándares de Internet tales como MIME, SMTP, POP3 e IMAP. E incluye el paquete javax.mail y
sub-paquetes.
Figura
7 Agregar Dependencia de JavaMail a pom.xml
Para agregar el archivo de JSF Managed Bean, presionamos clic derecho
sobre el proyecto como se muestra en la (Figura
8) “New”=> “JSF Managed Bean”.
Figura 8 New JSF Managed Bean
En la (Figura 9) Ingresamos del nombre que le vamos a colocar al archivo
JSF Managed Bean, para este el nombre que utilizaremos “emailJSFManagedBean”, y en el campo Scope dejamos el valor por
defecto que para este caso “request”
y presionamos el botón Terminar.
Figura
9 Nombre del archive y ubicación
Ahora, para aquellos de ustedes que están familiarizados con Contextos
JSF y la inyección de dependencias (CDI), las anotaciones no será un misterio.
Para aquellos de ustedes que no están, voy a explicar brevemente lo siguiente:
- @ManagedBean: Esto le dice al servidor de aplicaciones que los casos de este Bean se pueden denominar con el nombre que figura en el atributo de valor de la anotación. Esto significa que podemos usar el nombre en las páginas JSF para acceder a las instancias de mágicamente nuestra Bean.
La clase emailJSFManagedBean, desde JSF 2.0 en
adelante, Managed Bean pueden ser fácilmente registrado de acuerdo con las
anotaciones. La anotacion @RequestScope
que identifica el Managed bean como un
recurso que existe sólo en el scope del request. En otras palabras, El bean existe
para la duración de una sola petición HTTP para la interacción del Usuario con
la aplicación web. En el siguiente paso
declaramos ochos (8) variables que se describirán en la siguiente Tabla 1, en
el siguiente paso crearemos una nueva instancia de emailJSFManagedBean como se
muestra en la (Figura 10).
NOMBRE
DE LA VARIABLE
|
DESCRIPCIÓN
|
To
|
Quien enviara el correo
|
From
|
Para quien será remitido
el correo
|
Subject
|
El asunto o motivo del
correo
|
Descr
|
La descripción del correo
electrónico
|
Username
|
Usuario del correo
|
Password
|
Contraseña del correo
|
Smtp
|
Protocolo
|
port
|
Puerto que por defecto es
587 para habilitar los correos Gmail
|
Tabla 1 Descripción de las variables
Figura 10 Declaración de variables y creación de la nueva instancia
Después de tener las
variables declaradas privada, generamos los métodos de acceso “get y set” para cada una de las variables que conformaran los componentes
de la web. Crearemos dos (2) métodos ValidateEmail() que se encargara de
validar las direcciones de emails en los campos To, From y
Username como se muestra en la (Figura 11) que son enviados por el usuario en
aplicaciones web.
Figura 11 Método ValidateEmail
Este método recibe tres
parámetros:
- El contexto de la aplicación JSF, con el fin de pasar los mensajes de error desde el bean administrado a la interfaz de usuario.
- El identificador UIComponent toValidate del componente web que se llama al método, que, en este caso, es un método de campo de entrada de texto, toma la entrada del usuario como argumento.
- El valor de la variable, que contiene la dirección de correo electrónico que necesita ser validado.
- Comprobar si el valor es null o vacío. si el valor es null o vacío, el método establece la propiedad válida del componente false y establece el mensaje de error de E-mail que se requiere.
- En el caso que no sea null o vacio, el método comprueba si los caracteres “@”y el punto (.) están contenidos en el valor. En el caso que no estén incluido, el método establece la propiedad válida del componente “false” y establece el mensaje de error de “E-mail no es válido”.
El
segundo método es submitEmail() como se muestra en la (Figura 12) para este
caso no recibe ningún parámetro. Se encarga de
envía un correo electrónico. Si la transmisión de correo electrónico es
correcta, el método devuelve emailOk que muestra la pagina emailOk.xhtml
como se muetra en la (Figura 16) página
en el navegador en el caso contrario nos devuelve emailFal que muestra la
pagina emailFal.xhtml como se muestra en la (Figura 17).
Figura 12 Método submitEmail
Enviar un email usando JavaMail, primero iniciamos una instancia de la
session email con la clase Session, la sesión email es el punto inicial para la
API JavaMail, Se utiliza la clase java.util.properties
para obtener información, como por ejemplo el servidor de correo electrónico,
el usuario y la contraseña, que puede ser compartido en todo el resto de la
aplicación. En este caso, creamos una instancia predeterminada de la clase
Session:
session = Session.getInstance(props, new
javax.mail.Authenticator() {
@Override
protected PasswordAuthentication
getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
En segundo lugar, aunque la sesión, producimos el
email usando la clase de Message.
Sin embargo, considerando que Message
es una clase abstracta, elegimos la subclase MimeMessage, nos permite crear mensajes que entienden tipo MIME, como se define en las diferentes
normas que definen RFCs. El mensaje es construido con la sesión con un
argumento:
message = new MimeMessage(session);
Entonces, enviamos el email por manipulación de un tipo de objeto
Transport. El mensaje se envía a
través del protocolo de transporte SMTP. La transmisión está a cargo de la
clase de Transport y el objeto crea
una instancia de la siguiente forma:
Transport transport = session.getTransport("smtp");
a continuación, el objeto de transporte intenta conectarse a la SMTP servidor utilizando las credenciales sugeridas (la dirección del servidor SMTP, el número de puerto que acepta conexiones SMTP, el usuario y la contraseña) para pasar la autenticación en el servidor.
transport.connect(this.smtp,
this.port, this.username, this.password);
Si la conexión es aceptada por el servidor SMTP, el email se envía a través del comnado send. Por último, se cierra el servicio de transporte al invocar el comando close:
transport.sendMessage(message,
message.getAllRecipients());
transport.close();
En este paso vamos adicionar a nuestro Proyecto las páginas que vamos a
utilizar para este ejemplo serán cuatro (4) paginas pero comencemos por email “New File”=> “XHTML como se muestra en la (figura 13)
Figura 13 Creación de pagina JSF
En el siguiente paso
agregaremos el nombre de la página y presionamos el botón terminar como se
muestra en la (figura 14).
Figura 14 Nombre y ubicación de la página XHTML
Estos pasos lo repetimos para crear las paginas “emailOk” y “emailFal”
como se muestra en la (figura 16) y (figura 17).
Figura 15 Página para envió de email
Figura 16 Pagina confirmación de envió exitoso
Figura 17 Página de envió fallido del email
Descarga de proyecto
Referencias:
- http://www.javamagazine.mozaicreader.com/JulyAug2016/Default/37/0
- https://javamail.java.net/nonav/docs/api/
- https://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/
- http://www.journaldev.com/2532/javamail-example-send-mail-in-java-smtp
- http://www.javacirecep.com/internet/sending-email-using-gmail-smtp-in-java/
- https://es.scribd.com/document/93813056/javamagazine20120304-dl
Hola Geovanny
ResponderBorrarMuchas gracias por tu aporte me ayudo mucho para mi tarea pero tengo un problema. Tengo un web Aplicattion el cual hace un registro de libros en una base de datos y los lista y deseo que al guardar un nuevo libro en la base de datos se envie un mail. puedo adaptarlo para que lo haga ? y como lo haria?. Me ayudarias mucho. Gracias de antemano
Desde eclipse como le doy en New JSF Managed Bean ???
ResponderBorrars gracias por tu aporte me ayudo mucho para mi tarea pero tengo un problema. Tengo un web Aplicattion el cual hace un registro de libros en una base de datos y los lista y deseo que al guardar un nuevo libro en la base de datos se envie un mail. puedo adaptarlo para que lo haga ? y como lo h noticiasdesanxenxo.es/biografia-de-wooyoung/
ResponderBorrar