Grails: Enviando e-mails de uma forma REALMENTE simples

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/

13 thoughts on “Grails: Enviando e-mails de uma forma REALMENTE simples

  1. 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…

    Responda

    admin Reply:

    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.

    Responda

  2. Eu consegui utilizar esse uma vez, mas agora ele da erro na hora de instanciar “SimpleEmail email = new SimpleEmail()”

    Responda

  3. 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?

    Responda

    Kico (Henrique Lobo Weissmann) Reply:

    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.

    Responda

  4. 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

    Responda

  5. 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.

    Responda

    Kico (Henrique Lobo Weissmann) Reply:

    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.

    Responda

Leave a Reply

Your email address will not be published. Required fields are marked *