ApacheCommonsEmail

A Apache fornece a API Commons-Email com o objetivo de tornar simples para os desenvolvedores Java a tarefa de enviar e-mails com textos puros, em formato HTML e com anexos. Usando como base a API JavaMail da Sun, são fornecidas as seguintes classes:

SimpleEmail – Classe usada para enviar e-mails de texto simples. Não permite anexos.

HtmlEmail – Classe usada para enviar emails formatados como HTML. Permite arquivos no corpo ou anexados.

MultiPartEmail – Classe usada enviar mensagens multipart. Permite arquivos no corpo ou anexados.

EmailAttachment – Classe usada para criar os anexos de uma mensagem. Utilizada com instâncias de HtmlEmail ou MultiPartEmail.

EmailException – Exceção gerada em caso de algum erro no envio de mensagem.

Para demonstrar a utilização da API, implementei uma aplicação que envia email com arquivo pdf anexado de uma conta do yahoo para uma conta do gmail.

Adicionando Commons-Email na Aplicação

Primeiramente é necessário o download das bibliotecas commons-email e java-mail. Depois de descompactados os arquivos baixados, os respectivos arquivos commons-email-1.2.jar e mail.jar devem ser adicionados ao classpath da aplicação. A imagem abaixo mostra como ficou a estrutura da aplicação no eclipse:

Workspace da Aplicação no Eclipse
Estrutura da Aplicação no Eclipse

No diretório anexos se encontra o arquivo “postCommonsEmail.pdf” que será enviado anexado a mensagem de email.

Definindo Email do Rementente e Servidor SMTP

Com o classpath atualizado, a classe EnvioMensagemEmail pode ser implementada como mostra o código fonte. Um objeto estático da classe HtmlEmail é instanciado no método configurarParamentrosEnvio e as propriedades do email rementente e do seu respectivo servidor SMTP são definidas de acordo com os parametros recebidos. O SMTP do yahoo (smtp.yahoo.com.br) usa a porta 465 e necessita habilitar os protocolos SSL e TLS.

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

import java.io.File;

/**
 * @author Bruno Garcia
 * @since 11/01/2010
 */
public class EnvioMensagemEmail {

	/**
	 * Objeto da classe HtmlEmail envia emails formatados como HTML.
	 */
	private static HtmlEmail email;

	/**
	 * Define conta de email e servidor SMTP do remetente
	 *
	 * @param nomeServidorSmtp
	 *		Endereço do servidor SMTP da conta de email
	 * @param emailRemetente
	 * 		Endereço da conta de email do remetente
	 * @param senhaRementente
	 * 		Senha da conta de email do remetente
	 * @throws EmailException
	 */
	private static void configurarParametrosEnvio(
     String nomeServidorSmtp, String nomeRemetente,
	 String emailRemetente, String senhaRementente)
     throws EmailException {

		email = new HtmlEmail();

		email.setSSL(true);
		email.setTLS(true);
		email.setSmtpPort(465);

		email.setHostName(nomeServidorSmtp);
		email.setAuthentication(emailRemetente, senhaRementente);
		email.setFrom(emailRemetente, nomeRemetente);
	}

Anexando Arquivo e Enviando Mensagem

O método anexarArquivoMensagem cria um objeto da classe EmailAttachment, define o diretório e nome do arquivo de acordo com os paramêtros recebidos e anexa a mensagem usando o método attach de HtmlEmail.

O método enviarMensagemHtml define o destinatário, assunto e corpo da mensagem e a envia através do método send de HtmlEmail.

       /**
        * Anexa arquivo a mensagem de email a ser enviada
        *
        * @param diretorioAnexo
        * 		Diretório do arquivo a ser anexado
        * @param nomeArquivo
        * 		Nome com extensão do arquivo a ser anexado
        * @throws EmailException
        */
        private static void anexarArquivoMensagem(String diretorioAnexo,
         String nomeArquivo) throws EmailException {

               EmailAttachment anexo = new EmailAttachment();
               anexo.setPath(diretorioAnexo + File.separator + nomeArquivo);
               anexo.setDisposition(EmailAttachment.ATTACHMENT);
               anexo.setName(nomeArquivo);
               email.attach(anexo);
        }

        /**
         * Envia mensagem para email passado como paramêtro
         *
         * @param emailDestinatario
         * 		Endereço da conta de email do destinatario
         * @throws EmailException
         */
         private static void enviarMensagemHtml(String emailDestinatario)
          throws EmailException {

               email.addTo(emailDestinatario);
               email.setSubject("[Blog] Post sobre API Commons-Email");
               email.setHtmlMsg("Segue em anexo o arquivo pdf do post " +
               " sobre API <b>Commons-Email</b> da Apache.

");
               email.send();
         }

Executando Aplicação e Verificando Email Recebido

No método main da classe, são executadas as funções passando como paramêtros os dados do email remetente, do arquivo a ser anexado e do email destinatário.

   public static void main(String[] args) {
     try {
        configurarParametrosEnvio("smtp.mail.yahoo.com.br",
         "Bruno Garcia", "brunogarciavasconcelos@yahoo.com.br",
         "senha");

        anexarArquivoMensagem("anexos", "postCommonsEmail.pdf");

        enviarMensagemHtml("brunogarvas@gmail.com");

        System.out.println("Email enviado com sucesso!");
     } catch (EmailException e) {
        System.err.println(e.getMessage());
     }
  }
} // final da classe

Depois de implementada a classe, executamos a mesma como “Aplicação Java” no Eclipse e visualizamos a mensagem “Email enviado como sucesso!” no console. Acessando o gmail, visualizo o email recebido (clique na imagem para ampliar):

Mensagem recebida no Gmail
Mensagem recebida no Gmail

Conclusão

Esta API permite enviar e-mails utilizando poucas linhas de código e fornece métodos intuitivos para os desenvolvedores. Também apresenta facil configuração, necessitando adicionar somente um arquivo jar a aplicação.

Downloads:

http://commons.apache.org/downloads/download_email.cgi

http://java.sun.com/products/javamail/downloads/index.html

Fontes de Referência:

http://www.devmedia.com.br/articles/viewcomp.asp?comp=3306

http://commons.apache.org/email/userguide.html

5 comentários

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s