Para enviar correos electrónicos en java utilizaremos el API Java Mail, este API proporciona soporte para la construcción y envío de correos, independientemente del protocolo o la plataforma.
para nuestro ejemplo utilizamos 2 plataformas de emails:
- gmail
- hotmail
El ejemplo está basado en el patrón MVC tratado anteriormente en esta entrada, y subir archivos al servidor tratado en esta entrada; pero lo realmente importante son 3 archivos los (2) archivos de configuración y (1) la clase MailSender que es la encargada de hacer la magia.
la clase MailSender
package org.ingenio.ds.util.mail; import org.apache.commons.fileupload.FileItem; import com.sun.mail.smtp.SMTPTransport; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.StringTokenizer; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.util.ByteArrayDataSource; public class MailSender{ public static void enviarCorreo(String tipoServidor,String asunto, String destinatarios, List<FileItem> adjuntos, String contenido) throws Exception { if(tipoServidor==null){ tipoServidor="smtp"; } //objeto donde almacenamos la configuración para conectarnos al servidor Properties properties = new Properties(); //cargamos el archivo de configuracion properties.load(new MailSender().getClass().getResourceAsStream("/org/ingenio/ds/util/mail/"+tipoServidor+".properties")); //creamos una sesión Session session = Session.getInstance(properties, null); //creamos el mensaje a enviar Message mensaje = new MimeMessage(session); //agregamos la dirección que envía el email mensaje.setFrom(new InternetAddress(properties.getProperty("mail.from"))); List<InternetAddress> emailsDestino = new ArrayList<InternetAddress>(); int i = 0; StringTokenizer emailsSt = new StringTokenizer(destinatarios,";,"); while (emailsSt.hasMoreTokens()) { String email=emailsSt.nextToken(); try{ //agregamos las direcciones de email que reciben el email, en el primer parametro envíamos el tipo de receptor mensaje.setRecipients(Message.RecipientType.TO, new InternetAddress(email)); //Message.RecipientType.TO; para //Message.RecipientType.CC; con copia //Message.RecipientType.BCC; con copia oculta }catch(Exception ex){ //en caso que el email esté mal formado lanzará una exception y la ignoramos } } mensaje.setSubject(asunto); //agregamos una fecha al email mensaje.setSentDate(new Date(1,1,1)); BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText(contenido); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); if (adjuntos != null) { for (FileItem adjunto : adjuntos) { //agregamos los adjuntos messageBodyPart = new MimeBodyPart(); DataSource source = new ByteArrayDataSource(adjunto.getInputStream(), adjunto.getContentType()); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(adjunto.getName()); multipart.addBodyPart(messageBodyPart); } } mensaje.setContent(multipart); SMTPTransport transport = (SMTPTransport) session.getTransport("smtp"); try { //conectar al servidor transport.connect(properties.getProperty("mail.user"), properties.getProperty("mail.password")); //enviar el mensaje transport.sendMessage(mensaje, mensaje.getAllRecipients()); } finally { //cerrar la conexión transport.close(); } } }
y nuestros 2 archivos de configuración
configuración servidor smtp de gmail
gmail.properties
# archivo de configuración de email de gmail mail.smtp.host=smtp.gmail.com mail.smtp.auth=true mail.smtp.port=587 mail.smtp.starttls.enable=true mail.from=tucorreo@gmail.com mail.user=tucorreo@gmail.com mail.password=tuclave
configuración servidor smtp de hotmail
hotmail.properties
# archivo de configuración de email de hotmail mail.smtp.host=smtp.live.com mail.smtp.auth=true mail.smtp.port=25 mail.smtp.starttls.enable=true mail.from=tucorreo@hotmail.com mail.user=tucorreo@hotmail.com mail.password=tuclave
dentro de los archivos de configuración las líneas
mail.from=tucorreo@hotmail.com mail.user=tucorreo@hotmail.com mail.password=tuclave
se utilizan para el envío del email pero no son para la configuración del smtp.