en esta práctica vamos a crear una aplicación para enviar un correo electrónico a un contacto, configurando las instancias del programa y haciendo que el programa envie un eMail de forma automática cuando ejecutemos la aplicación. La dificultad de dicho programa es media, por lo que siguiendo a ésta página configurarás rapidamente dicho programa.
Librerías necesarias.Para que el email pueda ser enviado necesitas disponer de una serie de librerías que Java no tiene por defecto, ya que son librerías externas. Pincha en el siguiente enlace y descarga la librería JavaMail 1.6.2 del repositorio, concretamente el archivo javax.mail.jar. Te descargarás un archivo .jar que podrás usar en tu proyecto.
Abre un nuevo proyecto de JAVA con tu Eclipse.
Pulsa sobre Siguiente para escoger la librería descargada. Para ello, pulsa sobre el botón de Add Externals JARS y se te abrirá una ventana de exploración para escoger la libreria descargada.
Una vez escogida, se te añadirá al proyecto tras lo cual puedes pulsar finalizar para cerrar la ventana de nuevo proyecto.
En la ventana del Explorador de paquetes, expande el nuevo proyecto creado y pulsa clic derecho para crear una nueva clase sobre el directorio SRC.
Ponle un nombre a la clase y pulsa sobre Finalizar.
NOTA: Hasta ahora hemos utilizado un package de soporte de las clases. Como puedes observar ahora no he declarado ese paquete.
Añadiendo librerías.
Originalmente necesitaras solo una librería como lo es la librería java.util.Properties; aunque es recomendable usar también las siguientes librerías.
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
Ya que puede que la versión del paquete JavaMail no esté desarrollado del todo o te hayas bajado una versión inferior a la del tutorial.
Declaraciones de constantes.
Dentro de la clase principal de EnvioEmail tenemos que crear las constantes que utilizaremos en nuestro programa. Así pues, para el envío de un eMail necesitamos definir:
● Una dirección de envio.
● Una dirección de remitente.
● El nombre del remitente.
● El HOST de correo.
● El puerto del HOST.
● El usuario del gestor del correo.
● La contraseña del gestor de correo.
● El Subject del mensaje.
● Y el mensaje en cuestión.
Para ello usaré las constantes (recuerda que se utiliza la palabra reservada final para hacer una constante), y designaré los elementos en cuestión para tal fin.
Como puedes ver es como rellenar la configuración de un gestor de correo en donde SMTP_USERNAME y SMTP_PASSWORD hay que indicar el usuario y contraseña del servidor SMTP. JavaMail está configurado para salida a través de los puertos 587 y 465. Puedes escoger en la constante PORT el puerto que quieras, pero aseguraate que sea del protocolo SMTP.
Proceso Main.
Ya tenemos configurado los datos de acceso, la dirección del remitente y el mensaje que queremos enviar. Ahora solo queda el mensaje, pero no es fácil lo que viene. Para empezar, vamos a llamar a funciones y procesos incluidos dentro de la librería JavaMail por lo que la configuración que tienes que seguir en el Main es la siguiente:
Crear los objetos de correo.Crar los objetos de la clase Properties que contenga la configuración de conexión de la información del servidor.
Observa que se utiliza en el método Main un Throws Exception. Java permite manejar excepciones de manera directa fuera de bloques como el Try - Catch para el caso de que se produzca una excepción parar la ejecución del programa. Dicha palabra reservada servirá para indicar al proceso Main que en el caso de que se produzca un fallo (como por ejemplo la conexión a Internet está deshabilitada), se detenga la aplicación.
Es una forma que tiene Eclipse y Java de asegurar el funcionamiento de un código.
A continuación se tiene que crear una sesión del objeto Email con las propiedades anteriormente citadas.
Session session = Session.getDefaultInstance(props);
Ahora nos queda crear el cuerpo del mensaje, definirlo, y crear las dependencias para su transporte usando las constantes declaradas en el clase principal.
La mayoría de las propiedades y métodos que estás utilizando provienen del paquete de JavaMail, por lo que es importante no equivocarse a la hora de llamar a ciertas propiedades o métodos.
Como ya hemos entrado en materia y has visto el bloque Try - catch, vamos a utilizarlo en nuestro programa. Empieza por un crear un Try en el cual escribiremos un mensaje de enviando mesaje, de la forma:
System.out.println("Enviando...");
A continuación hay que conectar con el servidor de correo configurado anteriormente por lo que asignaremos al método connect de la variable transport los datos del servidor de correo, usuario y contraseña.
transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
Y para terminar con el Email, necesitamos enviarlo invocando al metodo sendMesenger() de transport como ves a continuación.
transport.sendMessage(msg, msg.getAllRecipients());
System.out.println("¡Email Enviado!");
Con eso hemos terminado el bloque Try. Ahora veremos que podemos hacer con el Catch. Si se produce cualquier tipo de error inesperado, el bloque Catch no lanzará la excepción de manera que si ponemos exception ex y después llamamos al error con una slaida por pantalla, el programa nos indicará cual ha sido el error enviado.
Para finalizar con finally cerramos la conexión de transport ya que si no lo cerráramos se produciría un error de envio al seguir abierta y en uso por el programa. La instrucción finally se ejecutará después de un bucle Try - Catch.
Qué te ha parecido este tutorial? Espero que te hay servido para aprender algo nuevo y recuerda visitar continuamente ésta página Web, ya que siempre la estoy actualizando con los mejores cursos y tutoriales.
Saludos.
A continuación te dejo el código fuente de dicho programa aquí lo podrás copiar y utilizar para tus proyectos.
//IMPORTAR LIBRERÍAS
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class EnvioEmail {
static final String FROM = "remitente@correo.com";
static final String FROMNAME = "Nombre remitente";
static final String TO = "correo@destino.com";
static final String SMTP_USERNAME = "servidor_correo@correo.com";
static final String SMTP_PASSWORD = "contraseñaCorreo";
static final String CONFIGSET = "ConfigSet";
static final String HOST = "servidor de correo";
static final int PORT = 587;
static final String SUBJECT = "Envio de prueba usando JAVA desde mirpas mail";
static final String BODY = String.join(
System.getProperty("line.separator"),
"Prueba de envio de correo desde Mirpas con JAVA.
",
"Este correo se ha enviado usando la librería JavaMail: ",
"Javamail Package",
" for Java."
);
public static void main(String[] args) throws Exception {
Properties props = System.getProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.port", PORT);
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(FROM,FROMNAME));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
msg.setSubject(SUBJECT);
msg.setContent(BODY,"text/html");
msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET);
Transport transport = session.getTransport();
try
{
System.out.println("Sending...");
transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
transport.sendMessage(msg, msg.getAllRecipients());
System.out.println("¡Email Enviado!");
}
catch (Exception ex) {
System.out.println("El email no se ha podido enviar.");
System.out.println("Error message: " + ex.getMessage());
}
finally
{
transport.close();
}
}
}
Si te ha servido de algo, por favor ayudame para que pueda seguir subiendo contenido, compartiendo, donando y visitando otros enlaces de mis redes sociales. Gracias.