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("user@gmail.com", "password", "destinatario@gmail.com");
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!



















