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.

[sourcecode language=”java”]
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);
}
[/sourcecode]

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.

[sourcecode language=”java”]
/**
* 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();
}
[/sourcecode]

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.

[sourcecode language=”java”]
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
[/sourcecode]

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

Anúncios

5 comentários

Deixe uma resposta