Bienvenidos a este nuevo post. En este caso, hablaré de un tema bastante útil y es enviar correos electrónicos a través de Java con texto en formato html y con un archivo adjunto. Para lograrlo, nos apoyaremos de la librería JavaMail. Una vez descargada será necesario agregarla a su proyecto para poder utilizarla. Sin más preámbulos adjunto el código fuente y lo comento para ver su funcionamiento: Clase Mailer (contiene la función para mandar el correo): package com.ea24.email; package com.ea24.email; import java.awt.HeadlessException; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; /** * * @author ea24 */ public class Mailer { Properties mailProps; public Mailer(Properties mailProps) { this.mailProps = mailProps; } public boolean sendMail(String user, String pass, String recipient) { try { Session session = Session.getDefaultInstance(mailProps, null ) ; session.setDebug(true ) ; //Se compone la parte del texto BodyPart text = new MimeBodyPart( ) ; text.setContent("n" + "
Comunicándose desde Java
n" + "Este email ha sido enviado desde java
n" + "", "text/html" ) ; // Se compone el archivo adjunto BodyPart attached = new MimeBodyPart( ) ; attached.setDataHandler(new DataHandler(new FileDataSource("C:/archivo.doc" ) ) ) ; attached.setFileName("Archivo adjunto.doc" ) ; // Una MultiParte para agrupar texto y adjunto. MimeMultipart multiPart = new MimeMultipart( ) ; multiPart.addBodyPart(text ) ; multiPart.addBodyPart(attached ) ; // Se compone el correo, dando to, from, subject y el contenido. MimeMessage message = new MimeMessage(session ) ; message.setFrom(new InternetAddress(user) ) ; message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient) ) ; message.setSubject("Correo desde JavaMail" ) ; message.setContent(multiPart ) ; // Se envia el correo. Transport transport = session.getTransport("smtp" ) ; transport.connect(user, pass ) ; transport.sendMessage(message, message.getAllRecipients() ) ; transport.close( ) ; } catch (HeadlessException e) { System.out.println(e.getMessage() ) ; return false; } catch (MessagingException e) { System.out.println(e.getMessage() ) ; return false; } return true; } }La clase no es muy complicada, contiene sólo un atributo de tipo Properties mailProps y que es el contiene las propiedades para la conexión con el servidor de correo y un constructor que recibe como parámetro ese objeto de tipo Properties. Luego está el único método sendMail que recibe tres parámetros user, pass y recipient donde: user: es el usuario de correo desde el que se mandará el mail pass: es la contraseña del correo desde el que se mandará el mail recipient: es el usuario de correo que recibirá el mail De inicio se requiere un objeto de Session mismo que recibe el objeto Properties para su instanciación. El método setDebug le indicará a la sesión si debe debuggear y mostrar todo lo sucedido con ella. Para este caso al contener texto y adjuntos se debe utilizar un BodyPart para el texto y otro para el adjunto. Para que el texto tenga formato html, se debe indicar en el método de la siguiente manera: text.setContent("texto en formato html", "text/html" ) ;Luego al bodyPart del adjunto, se le setea un dataHandler con el archivo a adjuntar. Después se crea un objeto de tipo MimeMultipart para agregar todas las partes (texto y adjunto, pero puede haber más). Hecho esto procedemos a crear la instancia de la clase MimeMessage para generar el mensaje completo seteando el usuario que envía, el que recibe, el asunto del mensaje y el contenido del mensaje. Finalemente con un objeto de tipo Transport, se inicia sesión con el usuario y contraseña de quien envía, se envía el mensaje con el método sendMessage de la siguiente forma; transport.sendMessage(message, message.getAllRecipients() ) ;Ya sólo resta cerrar el transport. Se capturan las excepciones necesarias y es todo para la clase. Luego tenemos la clase de prueba: package com.ea24.email; import java.util.Properties; import javax.swing.JOptionPane; /** * * @author ea24 */ public class Main { public static void main(String[] args) { //las propiedades para la conexión Properties mailProps = new Properties( ) ; mailProps.setProperty("mail.transport.protocol", "smtp" ) ; mailProps.setProperty("mail.smtp.host", "smtp.gmail.com" ) ; mailProps.setProperty("mail.smtp.starttls.enable", "true" ) ; mailProps.setProperty("mail.smtp.port", "587" ) ; mailProps.setProperty("mail.smtp.auth", "true" ) ; Mailer mailer = new Mailer(mailProps ) ; boolean wasSend = mailer.sendMail("[email protected]", "password", "[email protected]" ) ; if(wasSend) { JOptionPane.showMessageDialog(null, "El correo se envió correctamente." ) ; } else { JOptionPane.showMessageDialog(null, "No pudo enviarse el correo", "Error", JOptionPane.ERROR_MESSAGE); } } }Para la clase de prueba se crea el objeto de tipo properties y se llena con los valores adecuados según sea el servidor de correo. Depués se crea una instancia de la clase Mailer pasándole el archivo de propiedades y se llama al método sendMail pasándole el usuario, contraseña y destinatario. De acuerdo con lo que devuelva el método en la variable wasSend se determina si se envío o no el correo. Eso es básicamente todo lo que hay que hacer para el envío de correos electrónicos con texto en html y con archivos adjuntos. Ojalá sea de utilidad para muchos, si hay dudas ya saben. Saludos!