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/


Publicado

em

, ,

por

Tags:

Comentários

13 respostas para “Grails: Enviando e-mails de uma forma REALMENTE simples”

  1. Avatar de Renato dos Santos
    Renato dos Santos

    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…

    1. Avatar de admin
      admin

      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.

  2. Avatar de Thiago Marinho

    Estava no fórum grailsbrails e acabei caindo aqui! =)

    obrigado pela dica novamente! ^^

    já pensou em escrever um livro não? rsrsrs

    att. @tgmarinho

    1. Avatar de admin
      admin

      Oi Thiago, yeap, já pensei. E tá tomando forma aos poucos: http://guiagrails.itexto.com.br

      Grande abraço!

  3. Avatar de Daniel

    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

    1. Avatar de admin
      admin

      Valeu pelo toque Daniel!

  4. Avatar de Marqueza
    Marqueza

    Tanks man. A dica foi muito importante. Valeu mesmo.

  5. Avatar de Daniel
    Daniel

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

  6. Avatar de Tales M Godois

    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?

    1. Avatar de Kico (Henrique Lobo Weissmann)
      Kico (Henrique Lobo Weissmann)

      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.

  7. Avatar de Reinaldo
    Reinaldo

    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

  8. Avatar de Guilherme
    Guilherme

    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.

    1. Avatar de Kico (Henrique Lobo Weissmann)
      Kico (Henrique Lobo Weissmann)

      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.

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.