Enviando emails pelo gmail usando Rails

Durante o desenvolvimento de minha primeira aplicação com Ruby on Rails o primeiro grande problema com o qual esbarrei foi o envio de emails usando gmail. Depois de muita pesquisa ( e muita ajuda do Francisco Souza) consegui uma implementação  de forma muito mais simples do que o esperado e efetiva.

AVISO: Esta implementação só é válida para Rails >= 2.2.1 [RC2] e Ruby 1.8.7

Segue o passo a passo para implementar em sua aplicação:

Crie o arquivo config/initializers/smtp_gmail.rb. Este arquivo carregará suas configurações para fazer a conexão de sua aplicação com o gmail.
Inicialmente Vamos declarar que nosso envio será feito por smtp ( caso você queira usar somente para testes utilize :test no lugar de :smtp )

config.action_mailer.delivery_method = :smtp

Logo abaixo declaramos as configurações de acesso:

ActionMailer::Base.smtp_settings = {
  :address => "smtp.gmail.com",
  :port => 587,
  :authentication => :plain,
  :enable_starttls_auto => true,
  :user_name => "seu usuario @gmail.com",
  :password => "sua senha"
}

Em geral este código funciona para envios smtp em geral porém para o gmail é necessário que o tls esteja ativo, ação realizada pela linha:

  :enable_starttls_auto => true

Feito isso nossa aplicação se encontra configurada para enviar os emails usando a conta do gmail especificada.
Agora poderems trabalhar com o envio propriamente dito.

Vamos assumir que nossa classe de envio será UsuarioEmail para tanto executamos:

script/generate mailer UsuarioEmail

Com isso o rails cria um modelo Chamado UsuarioEmail onde colocaremos nossas configurações para envio. Então vamos editar nosso arquivo uque se encontra em app/models/usuario_email.rb

class Indique < ActionMailer::Base
  def enviar_email()
    @subject = "[RoR] Aprendendo a enviar emails "
    @body["site"] = "http://www.tagliati.com.br"
    @recipients = "quemvaireceber@dominio.com.br"
    @from = 'euquemandei@meudominio.com.br'
    @headers = {}
  end
end

Estas são apenas configurações básicas. Existem outras opções que podem ser preenchidas ( por exemplo @charset )
Agora precisamos definir o corpo de nosso email e onde ele será enviado.
Em app/view/usuario_email/ vamos criar nosso template de email. Para este exemplo o template se chamará enviar_email.text.html.erb . com um simples conteúdo:

Você acaba de receber um email enviado de uma aplicação Rails.
Li sobre em <%= @site%>

Note que o nome do arquivo possui o mesmo nome do método criado em nosso modelo para configurar o email.

Agora basta adicionar no controller em que queremos que envie o email o método que enviará o email:

def dispara_email()
UsuarioEmail.deliver_enviar_email();
end

E pronto. Assim que chamarmos nosso método dispara_email() será enviado o email usando a conta do gmail ( ou conta com acesso smtp ) configurada

Anúncios