Translate

sábado, 26 de abril de 2014

Enviando E-Mail com Java usando JavaMail e GMail

Eventualmente podemos nos defrontar com a necessidade de que nossas aplicações JAVA enviem E-mails, seja para gerar alertas, seja para rápida comunicação, etc. 

A JavaMail API permite esta implementação de maneira bastante simplificada. 

Juntamente com esta possibilidade, temos uma gigante e poderosa ferramenta de e-mail, gratuita, o Gmail do Google, que nos permite criar uma conta gratuita a fim de integrarmos a mesma à nossa aplicação. 

Os servidores do Gmail, necessitam de uma autenticação um pouco diferenciada (SSL), o que pode se tornar um fator complicador na implementação desta funcionalidade. 

Descrevo neste post uma Classe JAVA que é capaz de enviar emails usando texto simples, ou conteúdo HTML, para uma mensagem mais rebuscada. 

Além disso, realiza a validação e autenticação frente os servidores do Google, de forma a permitir a utilização da mesma com uma conta do Gmail

Você ainda pode compilar um .jar da mesma e utilizar seus métodos públicos de envio de e-mail, incorporando facilmente esta funcionalidade a qualquer outra aplicação, sem precisar escrever tudo novamente.


Baixando a JavaMail API

Para começarmos, devemos baixar e adicionar ao nosso classpath (importar o .jar dependendo da IDE) o arquivo java.mail.jar . 


Código Fonte

Abaixo código fonte completo e comentado. O método main()  pode ser usado para executar diretamente a classe no console e enviar mensagens.

Não esqueça de alterar o código com os endereços de remetente e destinatário. 

Para chamá-la através de outras aplicações, simplesmente instancie o construtor EnviaEmail(String, String); com o nome de usuário (cadastrado no Gmail) e senha.




package br.com.devfacil.email.view;

import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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;

/**
 * Classe Utilitária que contém métodos para envio de Email através de conta do
 * Gmail
 */
public class EnviaEmail {

    /**
     * Construtor sem parametros, ao ser chamado já instancia as configuraççoes
     * de email do Gmail na JVM
     *
     */
    public EnviaEmail(String userNameGmail, String senhaGmail) {

        this.username = userNameGmail;
        this.senha = senhaGmail;

        ajustaParametros();

    }

    /**
     * Variavel local para Sessao
     */
    Session session = null;

    String username = null;
    String senha = null;

    /**
     * Metodo 'main()' para teste e execução
     *
     */
    public static void main(String[] args) {

        /**
         * Mensagem de teste para envio de email Html
         */
        String mensagemHtmlTeste = "<html>\n"
                + "<body>\n"
                + "<h1> Mensagem para voc&ecirc;</h1>\n"
                + "<h2> conte&uacute;do da Mensagem:</h2>\n"
                + "<p>Mensagem enviada atrav&eacute;s de Aplica&ccedil;&atilde;o "
                + "que estudei no blog <a href=\"http://www.devfacil.blogspot.com.br\"><b>DevFacil!</b></a></p>\n"
                + "</body>\n"
                + "</html>";

        try {
            EnviaEmail ee = new EnviaEmail("eu@gmail.com", "123456");

            /**
             * Envia mensagem de e-mail com conteúdo html
             */
            ee.enviarEmailHtml("eu@gmail.com", "seu@amigo.com", "Estou aprendendo a Enviar Email através do JAVA!", mensagemHtmlTeste);
            
            /**
             * Envia mensagem de e-mail simples, somente com texto
             */
            ee.enviarEmailHtml("eu@gmail.com", "seu@amigo.com", "Estou aprendendo a Enviar Email através do JAVA!", "Mensagem Somente Texto");

        } catch (Exception ex) {

            System.out.println(ex.getMessage());

        }

    }

    /**
     * Metodo para envio de mensagem com texto simples
     */
    public void enviarEmail(String remetente, String destinatario, String assunto, String conteudo) throws Exception {

        try {

            Message message = new MimeMessage(session);

            //Configura o Remetente da mensagem
            message.setFrom(new InternetAddress(remetente));

            //Configura o Destinatário da mensagem
            Address[] toUser = InternetAddress
                    .parse(destinatario);

            //Configura o Assunto da mensagem
            message.setRecipients(Message.RecipientType.TO, toUser);
            message.setSubject(assunto);

            //Configura o Conteudo da mensagem
            message.setText(conteudo);

            /**
             * Envia a mensagem criada
             */
            Transport.send(message);

            System.out.println("Email enviado com Sucesso; ");

        } catch (MessagingException e) {
            throw new Exception("Erro ao enviar email! \n" + e.getMessage());
        }

    }

    /**
     * Metodo para envio de mensagem padrao HTML ja formatado
     */
    public void enviarEmailHtml(String remetente, String destinatario, String assunto, String conteudoHtml) throws Exception {
        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(remetente));

            Address[] toUser = InternetAddress
                    .parse(destinatario);

            message.setRecipients(Message.RecipientType.TO, toUser);
            message.setSubject(assunto);

            Multipart multipart = new MimeMultipart("related");
            BodyPart htmlPart = new MimeBodyPart();
            htmlPart.setContent(conteudoHtml, "text/html");

            multipart.addBodyPart(htmlPart);

            message.setContent(multipart);

            /**
             * Método para enviar a mensagem criada
             */
            Transport.send(message);

            System.out.println("Email enviado com Sucesso; ");

        } catch (MessagingException e) {
            throw new Exception("Erro ao enviar email! \n" + e.getMessage());
        }

    }

    /**
     * Configura aa propriedades da JVM com parametros do servidor Gmail
     *
     * Modificador de acesso 'private' pois não é necessário que este método
     * seja chamado de outras classes
     */
    private void ajustaParametros() {

        Properties props = new Properties();

        /**
         * Conexão com servidor Gmail
         */
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");

        /**
         * Associa autenticação a sessao de correio
         */
        session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, senha);
                    }
                });

    }

}

Nenhum comentário:

Postar um comentário