22
Nov
12

Enviar email con Java GMAIL/HOTMAIL

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.


9 Responses to “Enviar email con Java GMAIL/HOTMAIL”


  1. 1 Cicily M M
    noviembre 30, 2012 a las 9:23 pm

    hola amigos es un buen post… saben kisiera pedirles ayuda.. por supuesto si se puede…. me podrian ayudar con un tema para tesis con programacion en java…

    Date: Thu, 22 Nov 2012 22:40:36 +0000 To: gt_editions@hotmail.com

    • diciembre 3, 2012 a las 10:53 am

      whou un tema de tesis es algo serio, así que no se a que te refieres, si a una idea de algo que funcione como tesis, tesis de maestría o de doctorado?… y creo que deberías abrirte más a otras tecnologías

  2. julio 16, 2013 a las 5:18 pm

    saludos fue de gran ayuda pero me gustaria que me ayudases, pero quiero hacerlo en jsp con NetBeans bueno espero y me ayudes bro te agradecere de antemano

    • julio 17, 2013 a las 8:06 am

      en realidad lo que tienes que haces es crear tu proyecto WEB en netbeans y pegar las JSP y las Java y listo

  3. 5 juan
    octubre 27, 2013 a las 12:02 am

    No entiendo la parte de donde cargas el archivo, por que le encadenas el smtp.properties y abajo tienes que por ejemplo los archivos de configuracion son hotmail.properties, asi que no le entiendo en ese punto.

    • octubre 28, 2013 a las 7:55 am

      properties.load(new MailSender().getClass().getResourceAsStream(“/org/ingenio/ds/util/mail/”+tipoServidor+”.properties”));

      con esta línea cargamos el archivo de configuración el valor de tipoServidor puede ser ‘hotmail’ o puede ser ‘gmail’.

      entonces en tiempo de ejecución el cargará el archivo dependiendo del valor de tipoServidor seleccionado en la visat

  4. 7 Fredo
    junio 20, 2014 a las 5:28 pm

    que es lo que le tengo que mandar para esta variable “List adjuntos” de donde o como lo obtengo, de ante mano gracias.

  5. 8 Bitop
    abril 20, 2015 a las 11:43 am

    que onda excelente tutorial

    una duda si mi correo es de dominio ejemplo ( micorreo@miempresa.com ) cual seria la configuracion de el archivo.properties ???


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


I+Ds

Dudas consultas
Facebook
Twiter
Google +

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevas publicaciones por correo.

Únete a otros 348 seguidores

Ingenio DS en Facebook

Redes Sociales y Archivos

Entradas

noviembre 2012
L M X J V S D
« Abr   Ene »
 1234
567891011
12131415161718
19202122232425
2627282930  

IngenioDS en twiter


A %d blogueros les gusta esto: