[Métodos] Java Mail - Parte III - Enviar mail adjuntando archivos


Para poder recrear desde nuestro codigo Java, el envio de un mail con la opcion de adjuntar archivos,

Debemos hacer los mismos pasos que el envio de un mail sencillo ,

Con la pequeña particularidad que al objeto MimeMessage no le setearemos un String (con el contenido del mensaje) sino en su lugar un objeto MimeMultipart, a las cuales habrá que agregarles otros objetos MimeBodyPart que representan el texto (contenido del mensaje) por un lado y el archivo adjunto por otro.

El procedimiento es idéntico al envio de un mail normal hasta setearle al MimeMessage el mensaje, en lugar de usar el metodo setText(String) usaremos este otro setContent(MultiPart)
El codigo queria basicamente igual

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// (1)Crear una sesión de mail, seteando algunas propiedades
Properties misPropiedades = new Properties();
misPropiedades.setProperty("mail.smtp.host", "smtp.gmail.com");
misPropiedades.setProperty("mail.smtp.starttls.enable", "true");
misPropiedades.setProperty("mail.smtp.port", "587");
misPropiedades.setProperty("mail.smtp.user", "dar10comyr@gmail.com");
misPropiedades.setProperty("mail.smtp.auth", "true");

Session session = Session.getDefaultInstance(misPropiedades);

// (2)Construir objeto MimeMessage, con el objeto session.
MimeMessage message = new MimeMessage(session);

// (3)Al mensaje le seteamos emisor, destinatario, CC, Asunto, Mensaje.
try {
    message.setFrom(new InternetAddress("dar10comyr@gmail.com"));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("Destinatario@ejemplo.com"));
    message.addRecipient(Message.RecipientType.CC, new InternetAddress("CarbonCopy@ejemplo.com"));
    message.addRecipient(Message.RecipientType.BCC, new InternetAddress("BlindCarbonCopy@ejemplo.com"));
    message.setSubject("Hola");
    //message.setText("Correo enviado con Java Mail =)");

 /* ***AQUI IMPLEMENTAMOS MIMEBODYPART*** */

} catch (AddressException e) {
    e.printStackTrace();
} catch (MessagingException e) {
    e.printStackTrace();
}
// (4)Creamos un objeto 'Transport', y ejecutamos la emision del correo a través de sus metodos.
try {
    Transport t = session.getTransport("smtp");
    t.connect("dar10comyr@gmail.com", "lacontraseñadelmail");
    t.sendMessage(message, message.getAllRecipients());
    t.close();
} catch (NoSuchProviderException e) {
    e.printStackTrace();
} catch (MessagingException e) {
    e.printStackTrace();
}

Adjuntando archivos

Necesitaremos crear:
  • Un objeto de MimeMultipart a el cual hay que agregarles los objetos del cuerpo del mensaje y el/los archivos adjuntados.
  • Objetos de MimeBodyPart
    • Uno para el cuerpo del mensaje
    • Los que sean necesarios para adjuntar archivos.

Primero el mensaje:

MimeBodyPart mensaje = new MimeBodyPart();
mensaje.setText("Buenos dias a ti!\nTe envio este mail con JavaMail y te adjunto el codigo\nSalu2");

En segundo lugar podemos enviar un archivo de la extension que sea, (imagino que con un limite de peso, aunque lo desconosco)

MimeBodyPart archivoAdjunto = new MimeBodyPart();
FileDataSource fuenteArchivosDatos = new FileDataSource("C:\\mail.java");
DataHandler manejadorDatos = new DataHandler(fuenteArchivosDatos);
archivoAdjunto.setDataHandler(manejadorDatos);

Ahora si juntamos ambas parte y se las agregamos a MimeMultiPart

MimeMultipart multiParte = new MimeMultipart();
multiParte.addBodyPart(mensaje);
multiParte.addBodyPart(archivoAdjunto);

el resultado ha sido:




 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.dar10comyr.blogspot;

import java.util.*;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;

public class Imail {
    public static void main(String...Dar10){
  //Crear una sesión de mail, seteando algunas propiedades
    Properties misPropiedades = new Properties();
    misPropiedades.setProperty("mail.smtp.host", "smtp.gmail.com");
    misPropiedades.setProperty("mail.smtp.starttls.enable", "true");
    misPropiedades.setProperty("mail.smtp.port", "587");
    misPropiedades.setProperty("mail.smtp.user", "dar10comyr@gmail.com");
    misPropiedades.setProperty("mail.smtp.auth", "true");

    Session session = Session.getDefaultInstance(misPropiedades);
    session.setDebug(true);

    //Construir objeto MimeMessage, con el objeto session.
    MimeMessage message = new MimeMessage(session);

    //Al mensaje le seteamos emisor, destinatario, CC, Asunto, Mensaje.
    try {
        message.setFrom(new InternetAddress("dar10comyr@gmail.com"));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress("destinatario@example.com"));
        message.addRecipient(Message.RecipientType.CC, new InternetAddress("CarbonCopy@example.com"));
        message.addRecipient(Message.RecipientType.BCC, new InternetAddress("BlindCarbonCopy@ejemplo.com"));
        message.setSubject("Mail adjuntando archivo");
        
        /* ***AQUI IMPLEMENTAMOS MIMEBODYPART*** */
        
        MimeBodyPart mensaje = new MimeBodyPart();
        mensaje.setText("Buenos dias a ti!\nTe envio este mail con JavaMail y te adjunto el codigo\nSalu2");
        //===============================================\\
        MimeBodyPart archivoAdjunto = new MimeBodyPart();
        FileDataSource fuenteArchivosDatos = new FileDataSource("ruta del archivo");
        DataHandler manejadorDatos = new DataHandler(fuenteArchivosDatos);
        archivoAdjunto.setDataHandler(manejadorDatos);
      //===============================================\\
        MimeMultipart multiParte = new MimeMultipart();
        multiParte.addBodyPart(mensaje);
        multiParte.addBodyPart(archivoAdjunto);
      //===============================================\\
        message.setContent(multiParte);
        
    } catch (AddressException e) {
        e.printStackTrace();
    } catch (MessagingException e) {
        e.printStackTrace();
    }
    //Creamos un objeto 'Transport', y ejecutamos la emision del correo a través de sus metodos.
    try {
        Transport t = session.getTransport("smtp");
        t.connect("dar10comyr@gmail.com", "blogspot2016");
        t.sendMessage(message, message.getAllRecipients());
        t.close();
    } catch (NoSuchProviderException e) {
        e.printStackTrace();
    } catch (MessagingException e) {
        e.printStackTrace();
    }
    }
}

Comparte esto:

No hay comentarios:

Publicar un comentario