miércoles, 15 de mayo de 2013

 JavaMail(Parte 2) Enviar un correo con un dato adjunto.


En la publicación anterior realice el envío de un correo electrónico lo mas simple posible. Ahora adaptaremos el código para enviar un correo electrónico con un dato adjunto.

Recomiendo que visiten el post anterior para descargar las librerías y leer la explicación acerca del envío de correos electrónicos con JavaMail. Ir a entrada anterior.



import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
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;
/**
 * Ejemplo de envio de un correo de texto con una imagen adjunta con javamail
 * @author marxs7
  */
public class EnviarCorreoConAdjunto
{   String miCorreo="miCorreo@gmail.com";
    String miPassword="miPassword";
    String servidorSMTP="smtp.gmail.com";
    String puertoEnvio="587";
    String destinatario="destinatario@gmail.com";
    String asunto="Correo con adjunto";
    String mensaje = "mensaje con adjunto desde JAVA";//cuerpo del mensaje
    String archivoAdjunto=null;
    String nombreArchivo;
   
   
    public EnviarCorreoConAdjunto(String archivo,String nombre){
        archivoAdjunto=archivo;
        nombreArchivo=nombre;
    }    
    public void Enviar() throws MessagingException
    {
         
            Properties props=null;
            props = new Properties();
            props.put("mail.smtp.host", servidorSMTP);
           //si usan yahoo comentar la linea siguiente
                 props.setProperty("mail.smtp.starttls.enable", "true");
            props.setProperty("mail.smtp.port", "587");
            props.setProperty("mail.smtp.user", miCorreo);
            props.setProperty("mail.smtp.auth", "true");

            SecurityManager security = System.getSecurityManager();

     
            Authenticator auth = new EnviarCorreoConAdjunto.autentificadorSMTP();
            Session session = Session.getInstance(props, auth);
           // session.setDebug(true);//Descomentar si quieren ver en consola el proceso detallado
           

            // Se compone la parte del texto
            BodyPart texto = new MimeBodyPart();
            texto.setText(mensaje);
            BodyPart adjunto = new MimeBodyPart();
           adjunto.setDataHandler(new DataHandler(new FileDataSource(archivoAdjunto)));
           adjunto.setFileName(nombreArchivo);//es para que al descargar el archivo se
                                            //descargue con el formato correcto
           
           
            // Una MultiParte para agrupar texto e imagen.
            MimeMultipart multiParte = new MimeMultipart();
            multiParte.addBodyPart(texto);
            multiParte.addBodyPart(adjunto);
         
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(miCorreo));//quien lo envia
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(destinatario));//destinatario
            message.setSubject(asunto);//asunto
            message.setContent(multiParte);//asignamos los datos al mensaje

            // Se envia el correo.
            Transport t = session.getTransport("smtp");
            t.connect(miCorreo, miPassword);
            t.sendMessage(message, message.getAllRecipients());
            //System.out.println("Correo Enviado exitosamente!");
            t.close();
           
           
        }
     private class autentificadorSMTP extends javax.mail.Authenticator {
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(miCorreo, miPassword);
        }
     }
       
     public static void main(String[] args) throws MessagingException {
        // TODO Auto-generated method stub
        EnviarCorreoConAdjunto EnviarAdjunto = new EnviarCorreoConAdjunto("c:/imagen.gif",
                "imagen.gif");
        EnviarAdjunto.Enviar();
       
        System.out.println("Mensaje Enviado");
    }
    }

Esta en la base para el envío de correos electrónicos con datos adjuntos. Podemos adecuar el código expuesto de acuerdo a nuestras necesidades. Este ejemplo es demasiado sencillo solo es para comprender mejor la estructura. Cada persona puede predefinir los parámetros que le convenga.
Si desean crear una interfaz gráfica solo modifiquen el constructor para que acepte los parámetros que consideren necesarios.

En la próxima entrada explicaré la forma de enviar un correo electrónico con múltiples datos adjuntos a múltiples destinatarios.

No hay comentarios:

Publicar un comentario