Enviar un mail desde JAVA

GMail

Objetivo: Enviar un mail desde JAVA

Requisitos:

  • Tener un editor donde programar el código. (Yo me basaré con el Netbeans)
  • Nociones de JAVA.
  • La librería de Java Mail, aunque la adjunto en el proyecto. (la podréis descargar en la web oficial de Java)

 

Descripción: Esta demo constará d una pequeña ventana donde pediremos los datos al cliente, para posteriormente enviar el mail con una cuenta GMAIL. Importante comentar que, esta demo ha sido preparara para servicios GMAIL, para usar otros servicios habrá que modificar el código. Dicho esto, empezamos.

Primero deberemos crear una Ventana que se asemeje a esta:

Ventanta JMail sample

Una vez hecha, lo complejo será el botón Enviar, deberemos añadir este trozo de código en la acción del botón Enviar:

private void btnEnviarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        String pass = "";

        // Recogemos la contraseña del usuario y la guardamos como String.
        for (int i = 0; i < txtpass.getPassword().length; i++) {
            pass += txtpass.getPassword()[i];
        }

        //Creamos el objeto Mail
        Mail mail = new Mail(txtUser.getText(), pass, txtDestino.getText(), txtAsunto.getText(), mensaje.getText(), "gmail");
        //Llamamos al método Send de la clase Mail (creado anteriormente).
        String error = mail.send();

        /***
         * Como hemos decretado que nos devuelva un String llamado "error"
         * para controlar si hay errores, imprimimos un mensaje con el error
         * o un mensaje de envío correcto en función del valor de la String "error"
         * */
        if(error.equals("")){ // Si error = ""
            JOptionPane.showMessageDialog(this, "Envió Correcto", "Correcto", JOptionPane.INFORMATION_MESSAGE);
        }else{  // Si error != "" --> Es decir, ha habido un error.
           JOptionPane.showMessageDialog(this, "Error de envío:n"+error, "Error", JOptionPane.ERROR_MESSAGE);  
        }

    }

Para depurar un poco el código, he creado una variable String llamada error, que nos ayudará a controlar posibles errores en el momento de enviar el Mail. De este modo, podremos saber donde nos está fallando, e intentar arreglarlo. Y seguidamente, deberemos crear una clase que yo llamo Mail.java con la que trabajaremos los datos del formulario para enviarlos.

import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 *
 * @author OPuig
 *  We can find me on www.oriolpuig.com and forcode.es  
 * @version 1.0
 * @since December of 2012
 */
public class Mail {

    // Variables Privadas que se usarán para enviar el Mail
    private String user, pass, destino, subject, mensaje;
    // Objeto Properties, donde se añadirán los valores para enviar el Mail.
    private Properties props;

    // 

    /***
     * Pasamos los siguientes parámetros: usuario, contraseña, destinatario, asunto del mail, 
     * mensaje y tipo de cuenta mail.
     **/
    public Mail(String vuser, String vpass, String vdestino, String vsubject, String vmensaje, String tipo) {
        user = vuser;
        pass = vpass;
        destino = vdestino;
        subject = vsubject;
        mensaje = vmensaje;
        props = new Properties();

        // Tipo => Variará en función del proveedor de correo, en nuestro caso será GMAIL. 
        switch (tipo) {
            case "gmail":
                setGmailProps();
                break;
            case "other":
                break;
        }
    }

    //  

    //   
    private void setGmailProps() {
        // el host de correo, en nuestro caso gmail
        props.setProperty("mail.smtp.host", "smtp.gmail.com");
        props.setProperty("mail.smtp.starttls.enable", "true");
        //el puerto que vamos a usar
        props.setProperty("mail.smtp.port", "587");
        //el usuario
        props.setProperty("mail.smtp.user", user);
        //le indicamos que es necesario autentificarse
        props.setProperty("mail.smtp.auth", "true");
    }
    //  

    //   
    public String send() {
        //Variable utilizada para controlar errores y verlos.
        String error;
        try {
            // Creamos un objeto Session, para setear los parámetros.
            Session session = Session.getDefaultInstance(props);
            /**
             * Creamos un objeto Mensaje, donde introduciremos la Session (Esto
             * simula cuando entramos al Gmail y le damos a "Redactar" *
             */
            MimeMessage message = new MimeMessage(session);
            // Añadimos el Remitente del Mail.
            message.setFrom(new InternetAddress(user));
            // Añadimos el Destinatario.
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(destino));
            //Añadimos el Asunto.
            message.setSubject(subject);
            /**
             * Finalmente, añadimos el Mensaje, para ello, podríamos ponerlo en
             * HTML "text/html", aunque también acepta texto plano y de más. * *
             */
            message.setContent(mensaje, "text/html");

            /**
             * Seguidamente, creamos la conexión y enviamos el mensaje.
             */
            Transport t = session.getTransport("smtp");
            t.connect(user, pass);
            t.sendMessage(message, message.getAllRecipients());
            t.close();
            /*
             * Como os comentaba antes, ERROR es una variable String que nos retornará el error
             * en caso de que lo hubiera. 
             * */
            error = "";
        } catch (Exception e) {
            error = e.toString();
        }
        return error;
    }

    //  

    //   
    public String getDestino() {
        return destino;
    }

    public void setDestino(String destino) {
        this.destino = destino;
    }

    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public Properties getProps() {
        return props;
    }

    public void setProps(Properties props) {
        this.props = props;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    //   
}

Recordaos de hacer los Imports correctamente, puesto que si no los añadís no funcionará el código. A continuación, dejo código ejemplo de esta demo que he hecho y funciona. Para cualquier duda, dejad un comentario y lo vamos hablando. Espero que os haya sido de gran ayuda.

Descarja Ejemplo «Demo enviar un mail con Java»