Recentemente a necessidade de envio em massa de email, tem crescido fortemente, tanto que já perdi a conta de quantas vezes o funcionário do marketing e relacionamento me parou para perguntar: ?Como eu poderia disparar vários email a partir de uma planilha do excel??
Bem, até pouco tempo atrás eu apenas contornava a situação dizendo: essa demanda está em análise e o quanto antes nós a desenvolveremos.
Agora que expus a necessidade, vamos aos itens básicos para que atendamos ao pedido do usuário, sendo eles:
1 - Ler um arquivo com os destinatário do excel,
2 ? Compor o fonte da mensagem em html e mais o mais importante, anexar imagens no email e visualiza-las diretamente no corpo da mensagem e isso sem o auxílio de um servidor web ou algo do tipo.
3 ? Enviar a mensagem de forma assíncrona, para não travar a aplicação e manter o histórico de envio.
Simples, não é? Pois bem, veja como eu ataquei esses três pontos:
- Para que uma aplicação em java leia uma fonte do excel é necessário que haja uma estrutura pré-definida do arquivo, para que possamos identificar as linhas e colunas correspondentes após a leitura, certo! Caso contrário, como saberíamos em que coluna o email a enviar está? Por exemplo: A primeira sempre seria o email, a segunda o nome e assim por diante. Descartei essa possibilidade. Portanto, adotei o padrão csv (comma sepated values), que é muito mais simples de trabalhar e não requer nenhum framework adicional para que o utilizemos.
- Composição de html, nesse penei para desenvolver algo próximo do esperado. Pois o usuário está acostumado com ferramentas de alto nível, tal como Dreamweaver para compor NewsLetters e sem dúvida nenhuma, criar um editor html se extende muito além do que um simples mailer. Enfim, optei pelo caminho mais simples, defini dois componentes: um para o código fonte e outro para a visualização, sendo assim o usuário fica livre para editar o html diretamente na aplicação e também podendo utilizar algum editor, colar o fonte, conferindo no preview. Agora a parte mais difícil, sem dúvida foi empacotar a mensagem com anexos do tipo imagem e faze-los ativo quando o usuário visualiza o conteúdo no seu cliente de email: ThunderBird, Outlook, etc. Para isso tive que utilizar o campo Content-id da mensagem e substituir o caminho físico da imagem no html para cid:$id exemplo:
para
fazendo com que na reprodução da imagem no cliente ele procure o conteúdo da imagem no anexo da mensagem.
- O envio: Nesse ponto, já existem diversas alternativas, desde utilizar sockets para conectar ao servidor SMTP na porta 25 e enviar o email e até frameworks que simplificam e muito as etapas de criação e disparo. Contudo, optei pelo tradicional, a api da sun javamail. O único detalhe que otimizei, foi utilizar a classe de Transport com o método sendMessage variando apenas o segundo argumento to new InternetAddress[] { to } , fazendo com que a mensagem seja empacotada apenas uma vez e enviada n vezes, de acordo com sua necessidade.
Bem, estou utilizando essa aplicação e até o atual momento está atendendo muito bem.
Contudo, existem vários pontos a serem aprimorados e novos recursos a incluir.
Portanto, sinta-se livre para alterar e publicarem suas próprias versão
[]?s
Humberto Lino.
Dependências: api java mail da sun no classpath mail.jar
http://java.sun.com/products/javamail/