[Métodos] Java Mail Parte II - Enviar Mensaje


Para poder enviar un correo electronico con JavaMail, necesitaremos realizar 4 pasos:
  1. Crear una sesión de mail, seteando algunas propiedades.
  2. Construir objeto MimeMessage, con el objeto session.
  3. Al mensaje le seteamos emisor, destinatario, CC, Asunto, Mensaje.
  4. Creamos un objeto 'Transport', y ejecutamos la emision del correo a través de sus metodos.

1 - Creando una sesión


El primer paso es crear una sesión de la clase javax.mail.Session
  • public static Session getDefaultInstance(Properties props)
    • Obtiene el objeto de sesión predeterminado. Si aún no ha sido configurado uno previamente, se crea un nuevo objeto Session y se instala por defecto.
    • parámetros:
    • java.util.Properties props- Propiedades del objeto. Sólo se utiliza si se crea un nuevo objeto Session.
    • Devuelve:
    • Un objeto javax.mail.Session

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

setDebug(true) es una buena opción para mirar en la consola o en los archivos de logeos que es lo que va haciendo la sesión para construir e enviar el mensaje.

El objeto misPropiedades deberemos crearlo con las propiedades del servidor de correo electronico, para el caso de 'gmail':

Properties misPropiedades = new Properties();
// NOMBRE DEL HOST DEL CORREO, es smtp.gmail.com
misPropiedades.setProperty(mail.smtp.host", "smtp.gmail.com");
// TLS SI ESTA DISPONIBLE
misPropiedades.setProperty("mail.smtp.starttls.enable", "true");
// NUMERO DE PUERTO SMTP
misPropiedades.setProperty("mail.smtp.port", "587");
// NUESTRO CORREO ELECTRONICO
misPropiedades.setProperty("mail.smtp.user", "dar10comyr@gmail.com");
// AUTENTICACION PARA CONECTARSE, USUARIO Y CONTRASEÑA
misPropiedades.setProperty("mail.smtp.auth", "true");


Para otros servidores de correos electronicos las propiedades prodrian ser:

YAHOO MAIL OUTLOOK
mail.smtp.host smtp.mail.yahoo.com smtp-mail.outlook.com
mail.smtp.starttls.enable Si(Si está disponible.) Si
mail.smtp.port 465 o 587 587 (También se puede usar el puerto 25 como alternativa)
mail.smtp.auth Si


2 - Creando una MimeMessage


  • public MimeMessage(Session session)
    • constructor por defecto. Se crea un objeto MimeMessage vacío. El campo 'headers' se establece en un objeto InternetHeader vacío. El campo 'flag' se establece en un objeto Flags vacío. La bandera modified se establece en true.
    • Parámetros:
    • La session creada recientemente
    • Devuelve:
    • Una instancia de la clase MimeMessage para setear.

MimeMessage message = new MimeMessage(session);


3- Seteamos las opciones de envio


A este objeto hay que setearle los datos basicos para enviar un correo electronico, de la misma forma que otros clientes de correos electronicos ofrecen con una interfaz visual:


En nuestro codigo simplemente podriamos poner:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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 =)");
} catch (AddressException e) {
    e.printStackTrace();
} catch (MessagingException e) {
    e.printStackTrace();
}


4- Crear objeto Transport


Para crear nuestro boton de 'enviar', le pedimos a la session que hemos creado que obtenga el transporte pasando por parámetro un string identificando 'Simple Mail Transfer Protocol'
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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();
}

  • Con el metodo connect identificamos quienes somos(correo y pass)
  • El metodo snedMessage hará la magia de enviar nuestro correo usando la libreria de JavaMail
  • No olvidemos cerrar la conexión con el método close

Luego de ejecutarlo, 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
package com.dar10comyr.blogspot.red;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MiMail {

    public static void main(String[] args) {
        enviarMail("dzubaray@gmail.com", "Mensaje de prueba", 
                "Probando el método \'enviarMail\'. \n Salu2");
    }
    
    public static void enviarMail(String Destinatario, String Asunto, String Mensaje){
        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);

        MimeMessage message = new MimeMessage(session);
        try {
            message.setFrom(new InternetAddress("dar10comyr@gmail.com"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(Destinatario));
            message.setSubject(Asunto);
            message.setText(Mensaje);
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }

        try {
            Transport t = session.getTransport("smtp");
            t.connect("dar10comyr@gmail.com", "**********");
            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