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