- Cursos / Java
Java desde Cero: Correos Electrónicos
- publicado por Carlos Picca
- el 6 jun
- con 0 comentarios
Detalles del Tutorial
- Dificultad: Aprendiz
- Duración: 30 min
Más artículos en Java desde Cero
Este es el artículo número 15 de 15 de la serie Java desde Cero - Mostrar todos- Instalación & Configuración
- Sintaxis básica
- Clases y Objetos
- Tipos de datos
- Variables
- Operadores básicos
- Sentencias If y Switch
- Bucles
- String
- Archivos (E/S)
- Herencia
- Manejo de Excepciones – Parte I
- Manejo de Excepciones – Parte II
- Archivo de propiedades
- Correos Electrónicos
Bienvenidos Java desde Cero, curso en el cual aprendemos a programar sin conocimiento alguno. En el capítulo anterior, aprendimos todo lo relacionado a la creación y uso de archivos de propiedades dentro del mundo de Java. Si eres nuevo en este curso, te recomiendo que le eches un vistazo al capítulo anterior para que te pongas en contexto (Capítulo 14 – Archivo de propiedades)
Hoy vamos a ver todo lo relacionado a la creación y envío de correos electrónicos dentro del mundo de Java.
¿Cómo enviar un correo electrónico sencillo?
Veamos un ejemplo para enviar un email simple desde nuestra maquina usando Java.
import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class EnvioCorreo { public static void main(String [] args) { // La dirección de envío (to) String para = "[email protected]"; // La dirección de la cuenta de envío (from) String de = "[email protected]"; // El servidor (host). En este caso usamos localhost String host = "localhost"; // Obtenemos las propiedades del sistema Properties propiedades = System.getProperties(); // Configuramos el servidor de correo propiedades.setProperty("mail.smtp.host", host); // Obtenemos la sesión por defecto Session sesion = Session.getDefaultInstance(propiedades); try{ // Creamos un objeto mensaje tipo MimeMessage por defecto. MimeMessage mensaje = new MimeMessage(sesion); // Asignamos el “de o from” al header del correo. mensaje.setFrom(new InternetAddress(de)); // Asignamos el “para o to” al header del correo. mensaje.addRecipient(Message.RecipientType.TO, new InternetAddress(para)); // Asignamos el asunto mensaje.setSubject(“Primer correo sencillo"); // Asignamos el mensaje como tal mensaje.setText(“El mensaje de nuestro primer correo"); // Enviamos el correo Transport.send(mensaje); System.out.println(“Mensaje enviado"); }catch (MessagingException e) { e.printStackTrace(); } } }Debemos asegurarnos que nuestro localhost está conectado a Internet y con capacidad suficiente para enviar un correo electrónico.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 import javautil*;import javaxmail*;import javaxmailinternet*;import javaxactivation*; publicclassEnvioCorreo{ publicstaticvoidmain(String[]args) { // La dirección de envío (to) Stringpara="[email protected]"; // La dirección de la cuenta de envío (from) Stringde="[email protected]"; // El servidor (host). En este caso usamos localhost Stringhost="localhost"; // Obtenemos las propiedades del sistema Properties propiedades=SystemgetProperties(); // Configuramos el servidor de correo propiedadessetProperty("mail.smtp.host",host); // Obtenemos la sesión por defecto Session sesion=SessiongetDefaultInstance(propiedades); try{ // Creamos un objeto mensaje tipo MimeMessage por defecto. MimeMessage mensaje=newMimeMessage(sesion); // Asignamos el “de o from” al header del correo. mensajesetFrom(newInternetAddress(de)); // Asignamos el “para o to” al header del correo. mensajeaddRecipient(MessageRecipientTypeTO, newInternetAddress(para)); // Asignamos el asunto mensajesetSubject(“Primer correo sencillo"); // Asignamos el mensaje como tal mensaje.setText(“El mensaje de nuestro primer correo"); // Enviamos el correo Transportsend(mensaje); Systemoutprintln(“Mensaje enviado"); }catch(MessagingExceptione){ eprintStackTrace(); } }}
Si ejecutamos el código anterior:
$ java EnvioCorreo Mensaje enviado12 $java EnvioCorreoMensaje enviado
¿Cómo enviamos un correo electrónico con contenido HTML?
Veamos un ejemplo para enviar un correo electrónico HTML desde nuestra máquina.
Debemos asegurarnos que nuestro localhost está conectado a Internet y con capacidad suficiente para enviar un correo electrónico.
Este ejemplo es muy similar al anterior, excepto que aquí estamos utilizando setContent (método) para establecer el contenido cuyo su segundo argumento va a ser ”text/html” para especificar que el contenido HTML se incluye en el mensaje.
import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class EnvioCorreo { public static void main(String [] args) { // La dirección de envío (to) String para = "[email protected]"; // La dirección de la cuenta de envío (from) String de = "[email protected]"; // El servidor (host). En este caso usamos localhost String host = "localhost"; // Obtenemos las propiedades del sistema Properties propiedades = System.getProperties(); // Configuramos el servidor de correo propiedades.setProperty("mail.smtp.host", host); // Obtenemos la sesión por defecto Session sesion = Session.getDefaultInstance(propiedades); try{ // Creamos un objeto mensaje tipo MimeMessage por defecto. MimeMessage mensaje = new MimeMessage(sesion); // Asignamos el “de o from” al header del correo. mensaje.setFrom(new InternetAddress(de)); // Asignamos el “para o to” al header del correo. mensaje.addRecipient(Message.RecipientType.TO, new InternetAddress(para)); // Asignamos el asunto mensaje.setSubject(“Primer correo HTML"); // Asignamos el contenido HTML, tan grande como nosotros queramos mensaje.setContent("<h1>El mensaje de nuestro primer correo HTML</h1>", "text/html" ); // Enviamos el correo Transport.send(mensaje); System.out.println(“Mensaje enviado"); }catch (MessagingException e) { e.printStackTrace(); } } }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 import javautil*;import javaxmail*;import javaxmailinternet*;import javaxactivation*; publicclassEnvioCorreo{ publicstaticvoidmain(String[]args) { // La dirección de envío (to) Stringpara="[email protected]"; // La dirección de la cuenta de envío (from) Stringde="[email protected]"; // El servidor (host). En este caso usamos localhost Stringhost="localhost"; // Obtenemos las propiedades del sistema Properties propiedades=SystemgetProperties(); // Configuramos el servidor de correo propiedadessetProperty("mail.smtp.host",host); // Obtenemos la sesión por defecto Session sesion=SessiongetDefaultInstance(propiedades); try{ // Creamos un objeto mensaje tipo MimeMessage por defecto. MimeMessage mensaje=newMimeMessage(sesion); // Asignamos el “de o from” al header del correo. mensajesetFrom(newInternetAddress(de)); // Asignamos el “para o to” al header del correo. mensajeaddRecipient(MessageRecipientTypeTO, newInternetAddress(para)); // Asignamos el asunto mensajesetSubject(“Primer correo HTML"); // Asignamos el contenido HTML, tan grande como nosotros queramos mensaje.setContent("<h1>El mensaje de nuestro primer correo HTML</h1>", "text/html" ); // Enviamos el correo Transport.send(mensaje); System.out.println(“Mensaje enviado"); }catch(MessagingExceptione){ eprintStackTrace(); } }}
Si ejecutamos el código anterior:
$ java EnvioCorreo Mensaje enviado12 $java EnvioCorreoMensaje enviado
¿Cómo enviamos un correo electrónico con archivos adjuntos?
Veamos un ejemplo para enviar un correo electrónico con archivo adjunto desde nuestra máquina.
import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class EnvioCorreo { public static void main(String [] args) { // La dirección de envío (to) String para = "[email protected]"; // La dirección de la cuenta de envío (from) String de = "[email protected]"; // El servidor (host). En este caso usamos localhost String host = "localhost"; // Obtenemos las propiedades del sistema Properties propiedades = System.getProperties(); // Configuramos el servidor de correo propiedades.setProperty("mail.smtp.host", host); // Obtenemos la sesión por defecto Session sesion = Session.getDefaultInstance(propiedades); try{ // Creamos un objeto mensaje tipo MimeMessage por defecto. MimeMessage mensaje = new MimeMessage(sesion); // Asignamos el “de o from” al header del correo. mensaje.setFrom(new InternetAddress(de)); // Asignamos el “para o to” al header del correo. mensaje.addRecipient(Message.RecipientType.TO, new InternetAddress(para)); // Asignamos el asunto mensaje.setSubject(“Primer correo con archivos adjuntos"); // Creamos un cuerpo del correo con ayuda de la clase BodyPart BodyPart cuerpoMensaje = new MimeBodyPart(); // Asignamos el texto del correo cuerpoMensaje.setText(“Este el texto del correo"); // Creamos un multipart al correo Multipart multiparte = new MimeMultipart(); // Agregamos el texto al cuerpo del correo multiparte multiparte.addBodyPart(cuerpoMensaje); // Ahora el proceso para adjuntar el archivo cuerpoMensaje = new MimeBodyPart(); String nombreArchivo = “consulta.pdf"; DataSource fuente = new FileDataSource(nombreArchivo); cuerpoMensaje.setDataHandler(new DataHandler(fuente)); cuerpoMensaje.setFileName(nombreArchivo); multipart.addBodyPart(cuerpoMensaje); // Asignamos al mensaje todas las partes que creamos anteriormente mensaje.setContent(multiparte); // Enviamos el correo Transport.send(mensaje); System.out.println(“Mensaje enviado"); }catch (MessagingException e) { e.printStackTrace(); } } }Debemos asegurarnos que nuestro localhost está conectado a Internet y con capacidad suficiente para enviar un correo electrónico.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 import javautil*;import javaxmail*;import javaxmailinternet*;import javaxactivation*; publicclassEnvioCorreo{ publicstaticvoidmain(String[]args) { // La dirección de envío (to) Stringpara="[email protected]"; // La dirección de la cuenta de envío (from) Stringde="[email protected]"; // El servidor (host). En este caso usamos localhost Stringhost="localhost"; // Obtenemos las propiedades del sistema Properties propiedades=SystemgetProperties(); // Configuramos el servidor de correo propiedadessetProperty("mail.smtp.host",host); // Obtenemos la sesión por defecto Session sesion=SessiongetDefaultInstance(propiedades); try{ // Creamos un objeto mensaje tipo MimeMessage por defecto. MimeMessage mensaje=newMimeMessage(sesion); // Asignamos el “de o from” al header del correo. mensajesetFrom(newInternetAddress(de)); // Asignamos el “para o to” al header del correo. mensajeaddRecipient(MessageRecipientTypeTO, newInternetAddress(para)); // Asignamos el asunto mensajesetSubject(“Primer correo con archivos adjuntos"); // Creamos un cuerpo del correo con ayuda de la clase BodyPart BodyPart cuerpoMensaje = new MimeBodyPart(); // Asignamos el texto del correo cuerpoMensaje.setText(“Este el texto del correo"); // Creamos un multipart al correo Multipart multiparte=newMimeMultipart(); // Agregamos el texto al cuerpo del correo multiparte multiparteaddBodyPart(cuerpoMensaje); // Ahora el proceso para adjuntar el archivo cuerpoMensaje=newMimeBodyPart(); StringnombreArchivo=“consultapdf"; DataSource fuente = new FileDataSource(nombreArchivo); cuerpoMensaje.setDataHandler(new DataHandler(fuente)); cuerpoMensaje.setFileName(nombreArchivo); multipart.addBodyPart(cuerpoMensaje); // Asignamos al mensaje todas las partes que creamos anteriormente mensaje.setContent(multiparte); // Enviamos el correo Transport.send(mensaje); System.out.println(“Mensaje enviado"); }catch(MessagingExceptione){ eprintStackTrace(); } }}
Si ejecutamos el código anterior:
$ java EnvioCorreo Mensaje enviado12 $java EnvioCorreoMensaje enviado
Problemas comunes que nos podemos encontrar a la hora de generar el envío de correo
Los principales son:
Autenticación del usuario
Si necesitamos presentar una identificación de usuario y una contraseña para el servidor de correo electrónico para fines de autenticación entonces debemos agregar a las propiedades de configuración las siguientes:
propiedades.setProperty("mail.user", "usuario"); propiedades.setProperty("mail.password", “clave");12 propiedadessetProperty("mail.user","usuario");propiedadessetProperty("mail.password",“clave");
Múltiple direcciones de envío de correo
Si necesitamos enviar un correo electrónico a varios destinatarios debemos utilizar el siguiente método en vez de addRecipient
, el cual utilizamos en los ejemplos anteriores.
123 voidaddRecipients(MessageRecipientType tipo, Address[]direcciones)throws MessagingException
Observemos lo siguiente:
tipo – Esto se establece en TO, CC o BCC. Aquí CC representa Con Copia y BCC representa Con Copia Oculta (CCO). Ejemplo:
Message.RecipientType.TO
direcciones – Esta es el array de correos electrónicos.
Conclusión
En esta lección, vimos todo lo relacionado a la creación y envío de correos electrónicos dentro del mundo de Java. Si tienes alguna pregunta, yo estaré feliz de responderte en los comentarios, además espero que te unas y le eches un vistazo a todo el resto de este curso.
¡Te espero la próxima semana!