Olá desenvolvedores, no tutorial anterior implementamos um simulador de PDF para enviarmos por e-mail como anexo. Neste tutorial trataremos a implementação que possibilitará anexar o arquivo.

Temos na classe ObjetoEnviaEmail o método enviarEmail(), copie todo o método, assinatura e conteúdo e cole logo abaixo. Faremos uma cópia mesmo. E isso porque ele terá a mesma função do método implementado originalmente. Altere o nome da cópia do método para enviarEmailAnexo().

O novo método pode ser entendido como dividido em duas partes, onde a primeira refere-se ao corpo do e-mail, com texto, botão e a customização. E a segunda parte que trata do arquivo de PDF anexado a este e-mail. Assim, alguns ajustes serão necessários no método enviarEmailAnexo().

PARTE 1 | CORPO DO EMAIL

Para tratar, isto é, para analisar e armazenar o cabeçalho de uma dada parte do corpo instanciaremos um objeto, o MimeBodyPart vazio.

MimeBodyPart corpoEmail = new MimeBodyPart();

Dessa forma esta dada parte do corpo pode ser preenchida por um cliente que está criando uma mensagem multiparte. Mas que dada parte do corpo do e-mail é esta? Lembra da condição? Se existia um e-mail com HTML estilizada então este e-mail era setado para o envio. Mas se não, o e-mail era enviado “cru”.

Nesta implementação da condição o objeto que recebia os valores “setados” do e-mail era o message, que agora será substituído pelo objeto corpoEmail.

PARTE 2 | ANEXO DO E-MAIL

Agora na parte dois para tratarmos do anexo igualmente instancie um novo objeto que referenciará o arquivo que será anexado.

MimeBodyPart anexoEmail = new MimeBodyPart();

O objeto anexoEmail vai “setar” por meio do método invocado setDataHandler() a instancia da fonte de dados que é um array de dados. O método setDataHandler() fornece o mecanismo para definir o conteúdo desta parte do corpo do email.

A fonte de dados receberá como argumento os dados, isto é, o simulador. O segundo argumento identifica o tipo de arquivo.

anexoEmai.setDataHandler (new DataHandler 
(new ByteArrayDataSource(simuladorDePDF(), “application/pdf”)));

“Setaremos” também o nome e a extensão do arquivo.

UNINDO PARTES 1 E 2

Agora precisamos unir as duas partes, para este fim instanciaremos o objeto Multipart. A classe Multipart fornece métodos para recuperar e definir subpartes, neste caso unindo corpo e anexo do e-mail.

E por fim pegaremos o objeto message e “setaremos” como conteúdo dele o objeto multipart.

Message.setContent(multipart);

No AppTest agora o método enviaEmail() invocará o enviarEmailAnexo() passando true como argumento.

EM POUCAS PALAVRAS

Neste tutorial implementamos o método que nos permite anexar um arquivo de PDF. E no tutorial passado criamos o método de simulador de PDF com iText. Eu fico por aqui e nos vemos no próximo tutorial.