Enviar e-mails usando Grails pode ser uma tarefa muito chata. Sim, temos o plugin mail , com o qual muitas pessoas enfrentam dificuldades (e outra: é uma alternativa útil somente dentro do ambiente Grails). Outra possibilidade consiste em usar os wrappers que o próprio Spring nos oferece para lidar com o problema, porém a tarefa continua sendo, ao menos na minha opinião, complexa DEMAIS para algo que deveria ser simples (aliás, se quiser tornar o processo realmente infernal, experimente usar a API Java Mail).
Visto que as aplicações que crio em Grails nem sempre possuem sua lógica de negócios implementada em Groovy, precisava de uma solução que pudesse fácilmente implementar usando Java puro. A solução que encontrei é o Commons E-mail que, como o próprio nome já diz, consiste em um subcomponente da excelente biblioteca Commons da Apache.
Para ilustrar o uso deste bichinho, segue abaixo um serviço extremamente simples que implementei:
import org.apache.commons.mail.SimpleEmail class MailService { boolean transactional = false // Inclui as configurações do serviço no próprio serviço apenas por comodidade para este post String host= "mail.itasks.com.br" String username = "seu_user_name_aqui" String password = "senhaquente" String from = "eu@eu.com" Integer port = 465 def send(String subject, String msg, String to) { //SimpleEmail é a nossa classe heróica SimpleEmail email = new SimpleEmail() email.setHostName(host) email.addTo(to) email.setFrom(from) email.setSubject(subject) email.setMsg(msg) //Precisando de autenticação, ESTE é o método email.setAuthentication(username,password) // Caso precise definir a porta do seu servidor smtp email.setSmtpPort(port) // e isto faz todo o trabalho pra você :) email.send() } }
Reparou na simplicidade do código? Não precisei me preocupar com sessões, mimetypes, nada! Apenas as configurações básicas do seu servidor SMTP e da mensagem que você pretende enviar.
Dependência
A única dependência do componente consiste no JAF, que é um arquivo de menos de 300kb que pode ser baixado em http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp
Site do projeto: http://commons.apache.org/email/
Boa tarde, estou utilizando este código que vc postou, realmente é uma forma muito simples de envio de email.
No meu caso utilizo um servidor linux que envia estes emails, mas em alguns gerenciadores de email os acentos são trocados por ‘?’ ou simplesmente caracteres especiais são ignorados. Este problema é de configuração do gerenciador de email de cada maquina ou precisa ser setado algum parametro no envio para que seja respeitado caracteres especiais? Valeu…
No caso, o problema está no cliente,que deve estar configurado com alguma outra codificação diferente da que você está usando para enviar sua mensagem.
Estava no fórum grailsbrails e acabei caindo aqui! =)
obrigado pela dica novamente! ^^
já pensou em escrever um livro não? rsrsrs
att. @tgmarinho
Oi Thiago, yeap, já pensei. E tá tomando forma aos poucos: http://guiagrails.itexto.com.br
Grande abraço!
Opa..
A url da dependência esta quebrada..
Baixei em :
http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/commons/commons-email/1.1/commons-email-1.1.jar
Só 30 KB…
Abraços
Valeu pelo toque Daniel!
Tanks man. A dica foi muito importante. Valeu mesmo.
Eu consegui utilizar esse uma vez, mas agora ele da erro na hora de instanciar “SimpleEmail email = new SimpleEmail()”
Olá kiko, ainda não testei o uso ja ja vou testar, mas antes de testar gostaria de saber algumas coisas por exemplo, desta forma tem como eu, na msg, setar um arquivo de texto ou html .gsp por exemplo?
outra coisa em relação a porta, eu normalmente uso a 587, tem alguma diferneça significativa em usar a 587 ou a 465?
Oi Tales.
Você quer dizer renderizar o gsp na mensagem? Neste caso, use o recurso de templates do próprio Groovy.
Com relação à porta, não muda nada se você trocar o número.
Estou com o mesmo problema do Daniel, ele para na linha que instancia a classe: “SimpleEmail email = new SimpleEmail()” .
A aplicação roda normal, mas quando solicito o envio do Email aparece a tela informando o erro.
Erro que aparece, além de parar na linha mencionada a cima.
Class java.lang.ClassNotFoundException
Message javax.mail.internet.MimeMultipart
Opa,
Estou com o mesmo problema reportado pelo Daniel.
unable to resolve class SimpleEmail @ line 14, column 25.
SimpleEmail email = new SimpleEmail()
Estou utilizando Grails na versão 2.5.5.
Guilherme, dado que este é um post bem antigo, minha recomendação a você é dar uma olhada no site http://search.maven.org pela versão mais nova da biblioteca Commons E-mail e, na sequência, substituir a referência no seu projeto.