Nunca tive grandes dificuldades para fazer o envio de e-mails através do sistemas que desenvolvi, mas tinha que me deparar com Session, Transport, System.properties. Como era a única opção, encarava assim mesmo.
Mas depois que conheci o projeto Apache Commons Email (http://commons.apache.org/email/) tudo ficou mais fácil.
alias, convido a todos para conhecer os projeto do Apache Commons, existem coisas muito interessantes por lah, nos proximos posts foi abordar mais projetos do Commons.
Mas voltando ao e-mail, a facilidade e simplicidade que este projeto provê é muito grande. Veja um primeito exemplo de e-mail:
SimpleEmail email = new SimpleEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("Test message");
email.setMsg("This is a simple test of commons-email");
email.send()
Precisa autenticar no servidor?
email.setAuthentication("fulano", "teste123");
A porta do servidor não é a padrão?
email.setSmtpPort(25);
Quer enviar a mensagem como prioritária?
email.addHeader("X-Priority", "1");
email.addHeader("Priority", "Urgent");
email.addHeader("Importance", "high");
Quer anexar arquivo?
// Cria o e-mail preparado para os anexosAnexar arquivo externo?
MultiPartEmail email = new MultiPartEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("The picture");
email.setMsg("Here is the picture you wanted");
// Cria o anexo
EmailAttachment attachment = new EmailAttachment();
attachment.setPath("mypictures/john.jpg");
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription("Picture of John");
attachment.setName("John");
// Adiciona o anexo
email.attach(attachment);
// Envia o e-mail
email.send();
EmailAttachment attachment = new EmailAttachment();
attachment.setURL(new URL("http://www.apache.org/images/asf_logo_wide.gif"));
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription("Apache logo");
attachment.setName("Apache logo");
email.attach(attachment);E-mail em HTML e com imagem incorporada?
// Cria a mensagem HTML
HtmlEmail email = new HtmlEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("Test email with inline image");
// incorpora a mensagem e obtem o cid (content ID)
URL url = new URL("file://c:\logos\logo.gif");
String cid = email.embed(url, "Apache logo");
// seta a mensagem em HTML
email.setHtmlMsg("<html>The apache logo - <img src='cid:"+ cid +"' /></html>");
// seta a mensagem correspondente sem HTML
email.setTextMsg("Your email client does not support HTML messages");
// envia o e-mail
email.send();
Se você quiser incorporar imagens locais, poderá passar no construtor do objeto URL o caminho precedido por (file://). Ex: file://c:\image.gif
Mas eu queria usar o Session do JavaMail para ter mais performance no envio de uma grande quantidade de e-mails!
Para isto utilize o método .email.setMailSession(session)
Para debuggar o funcionamento desta biblioteca, ative o DEBUG.
Para ativar o debug, utilize o método setDebug(boolean). Ex: email.setDebug(true)
Informações sobre o andamento interno do envio do e-mail serão impressas no console, via System.out.println()
Bibliotecas necessáriasPara utilizar o apache commons-mail, são necessários os jars abaixo:
- commons-email-1.0.jar (obter em http://commons.apache.org/downloads/download_email.cgi)
- activation.jar (obter em http://java.sun.com/products/javabeans/jaf/downloads/index.html)
- mail.jar (http://java.sun.com/products/javamail/downloads/index.html)
Estes jars devem ser incluídos no classpath da sua aplicação, ou colocados em WEB-INF\lib se a sua aplicação for WEB.
Bons e-mails e abraços a todos!