Revista Informática

Java desde Cero: Correos Electrónicos

Publicado el 06 junio 2014 por Codehero @codeheroblog
Java-logo
  • 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
  1. Instalación & Configuración
  2. Sintaxis básica
  3. Clases y Objetos
  4. Tipos de datos
  5. Variables
  6. Operadores básicos
  7. Sentencias If y Switch
  8. Bucles
  9. String
  10. Archivos (E/S)
  11. Herencia
  12. Manejo de Excepciones – Parte I
  13. Manejo de Excepciones – Parte II
  14. Archivo de propiedades
  15. 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.

Debemos asegurarnos que nuestro localhost está conectado a Internet y con capacidad suficiente para enviar un correo electrónico.

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(); } } }

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 enviado

12 $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 enviado

12 $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.

Debemos asegurarnos que nuestro localhost está conectado a Internet y con capacidad suficiente para enviar un correo electrónico.

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(); } } }

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 enviado

12 $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.

void addRecipients(Message.RecipientType tipo, Address[] direcciones) throws MessagingException

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!



Volver a la Portada de Logo Paperblog