Se você já tentou enviar um e-mail utilizando a API JavaMail diretamente sabe que é um pouquinho complicado, principalmente quando você está apenas querendo mandar um e-mail simples, de notificação por exemplo. Então para facilitar este trabalho existe uma API que simplifica esta atividade a Commons Email da Apache que é construída em cima da API do JavaMail.

Basicamente ela fornece as seguintes classes para trabalharmos:

  • SimpleEmail – Esta classe é sada para enviar e-mails como texto plano
  • HtmlEmail – Esta classe é usada para enviar e-mails no formato HTML. Ela permite inserir anexo anexos na mensagem e suporta imagens incorporadas
  • EmailAttachment – Esta classe é um simples contêiner que permite lidar com anexos de forma simples.

Para começar a utilizar devemos baixar as bibliotecas Commons Email e JavaMail e os insira no classpath.

blibliotecas eclipse
Inserindo Bibliotecas necessárias no Eclipse

Agora o código para enviar um e-mail sem formatação

SimpleEmail email = new SimpleEmail();
email.setSSLOnConnect(true);
email.setHostName( "smtp.seudominio.com.br" );
email.setSslSmtpPort( "465" );
email.setAuthenticator( new DefaultAuthenticator( "rodrigo@seudominio.com.br" ,  "1234" ) );
try {
	email.setFrom( "rodrigo@seudominio.com.br");
	
	email.setDebug(true); 
	
	email.setSubject( "Assunto do E-mail" );
	email.setMsg( "Texto sem formatação" );
	email.addTo( "rodrigoaramburu@gmail.com" );//por favor trocar antes de testar!!!!
	
	email.send();
	
} catch (EmailException e) {
	e.printStackTrace();
} 

Na linha 1 criamos um objeto SimpleEmail que será utilizado para enviar a mensagem. Na linha 2 chamamos o método setSSLOnConnect passando o parâmetro true, para fazer nossa mensagem ser enviada por uma conexão SSL já que a maior parte dos servidores exige, se seu servidor de e-mail não utiliza SSL esta linha não é necessário.

Na linha 3 configuramos o endereço do servidor de e-mails.

Na linha 4 configuramos a porta do servidor de e-mails, se estivermos utilizando SSL devemos configurar utilizando o método setSslSmtpPort que recebe o número da porta como String, mas se não estivermos chamamos o método setSmtpPort que recebe um inteiro como parâmetro.

Na linha 5 criamos um objeto DefaultAuthenticator configurando o usuário e senha para autenticação de seu servidor de e-mail e adicionamos ele no objeto SimpleEmail.

Na linha 7 configuramos o endereço de envio. Podemos também chamar este método com dois parâmetros sendo o primeiro o endereço de e-mail e o segundo o nome de quem está enviando a mensagem.

Na linha 9 configuramos para mostrar informações de debug na saída padrão, que ajuda bastante quando o no desenvolvimento.

Na linha 11 adicionamos o assunto de da mensagem, na linha 12 adicionamos a mensagem do e-mail.

Na linha 13 adicionamos o destinatário da mensagem.

Na linha 15 é chamado o método send() que efetivamente enviará o e-mail.

HtmlEmail

Agora vamos mandar um e-mail formatado com HTML, para isso basicamente criamos um objeto HtmlEmail em vez do SimpleEmail e no texto da mensagem podemos colocar tags que serão interpretadas.

HtmlEmail email = new HtmlEmail();
email.setSSLOnConnect(true);
email.setHostName( "smtp.seudominio.com.br" );
email.setSslSmtpPort( "465" );
email.setAuthenticator( new DefaultAuthenticator( "rodrigo@seudominio.com.br" ,  "1234" ) );
try {
	email.setFrom( "rodrigo@seudominio.com.br" , "Rodrigo Aramburu");
	email.setDebug(true); 
	email.setSubject( "Assunto do E-mail" );
	
	StringBuilder builder = new StringBuilder();
	builder.append("<h1>Um titulo</h1>");
	builder.append("<p>Lorem ipsum dolor sit amet, <b>consectetur adipiscing elit</b>. Duis nec aliquam tortor. Sed dignissim dolor ac est consequat egestas. Praesent adipiscing dolor in consectetur fringilla.</p>");
	builder.append("<a href=\"http://wwww.botecodigital.info\">Boteco Digital</a> <br> ");
	builder.append("<img src=\"http://www.botecodigital.info/wp-content/themes/boteco/img/logo.png\">");
			
	email.setHtmlMsg( builder.toString() );
	email.addTo( "rodrigoaramburu@gmail.com" );
	email.send();
} catch (EmailException e) {
	e.printStackTrace();
} 

Anexo

Para enviar um arquivo anexo junto com nosso e-mail basta adicioná-lo a mensagem.

HtmlEmail email = new HtmlEmail();
email.setSSLOnConnect(true);
email.setHostName( "smtp.seudominio.com.br" );
email.setSslSmtpPort( "465" );
email.setAuthenticator( new DefaultAuthenticator( "rodrigo@seudominio.com.br" ,  "1234" ) );
try {
	email.setFrom( "rodrigo@seudominio.com.br" , "Rodrigo Aramburu");
	email.setDebug(true); 
	email.setSubject( "Assunto do E-mail" );

	EmailAttachment anexo = new EmailAttachment();
	anexo.setPath("boteco.pdf");
	anexo.setDisposition(EmailAttachment.ATTACHMENT);
	anexo.setName("boteco.pdf");

        email.attach(anexo);
			
	email.setHtmlMsg( "Segue anexo" );
	email.addTo( "rodrigo@botecodigital.info" );
	email.send();
} catch (EmailException e) {
	e.printStackTrace();
} 

Na linha 11 criamos um objeto EmailAttachment que representa o arquivo a ser anexado, na linha 12 configuramos o caminho do arquivo que deve ser o caminho do arquivo no seu sistema de arquivo, podemos utilizar o caminho relativo ou absoluto.

Na linha 13 configuramos o “Content-disposition” no cabeçalho para ATTACHMENT.

Na linha 14 podemos definir um nome para o arquivo, podendo ser diferente do nome original.

Na linha 16 adicionamos o objeto EmailAttachment criado e configurado para o objeto da mensagem e seguimos os códigos normais para enviar como fizemos anteriormente.

Imagem incorporada

Vamos ver agora como colocar uma imagem incorporada no texto da mensagem.

HtmlEmail email = new HtmlEmail();
email.setSSLOnConnect(true);
email.setHostName( "smtp.seudominio.com.br" );
email.setSslSmtpPort( "465" );
email.setAuthenticator( new DefaultAuthenticator( "rodrigo@seudominio.com.br" ,  "1234" ) );
try {
	email.setFrom( "rodrigo@seudominio.com.br" , "Rodrigo Aramburu");
	email.setDebug(true); 
	email.setSubject( "Assunto do E-mail" );

	String id = email.embed( new File("imagem1.png") );
	       
	String mensagem = "Segue uma imagem <img src=\"cid:"+id+"\"> fim da imagem";
	
	email.setHtmlMsg( mensagem  );
	email.addTo( "rodrigo@botecodigital.info" );
	email.send();
} catch (EmailException e) {
	e.printStackTrace();
} 

Basicamente a única diferença é na linha 11 onde chamamos o método embed que recebe como parâmetro um objeto File que será anexado ao e-mail e retornará um identificador String que iremos utilizar para inserir este arquivo no corpo da mensagem.

Na linha 13 inserimos o arquivo anexado anteriormente no corpo da mensagem através da tag img colocando em seu atributo src o cid que que indica que queremos utilizar um arquivo incorporado que terá o identificador que segue após os “:”.

Como sei que irão perguntar, segue as configurações para o GMail, mas não esqueça que o GMail limita a quantidade de e-mails enviados em um dia.

email.setHostName( "smtp.gmail.com" );
email.setSslSmtpPort( "465" );
email.setStartTLSRequired(true);
email.setSSLOnConnect(true);

Bom era isso! T+ !