Enviando email com RoR - A busca pela felicidade
Estive com um problema em mãos, criar um cadastro de contato e enviar por email, esse não é um grande problema, tendo em vista que uso RubyOnRails, que transforma a maioria dos meus problemas em soluções.
Buscando na NET (google, claro) achei os ótimos textos do Marcos Zimmermann
e claro, a famosa Rails para sua diversão e lucro do Ronaldo Melo Ferraz, que você encontrará em http://www.htmlstaff.org/ver.php?id=5016 (aliás, esta é sem dúvida uma referência em apostila para iniciantes em RoR, obrigado Ronaldo), também encontrei um texto em inglês: http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer mas… (sempre tem um mas!), acontece que, sempre que tentava iniciar o servidor ocorria o seguinte erro:
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:278:in `load_missing_constant’: uninitialized constant ActionMailer (NameError) .
Até onde eu sabia ActionMailer estava correto, será que era eu quem estava errado?
Após subir ao monte everest, procurar o monge-que-tudo-sabe para me mostrar o segredo da felicidade ele me disse:
Filho meu, o segredo é:
No arquivo config/enviroment.rb, em vez de usar ActionMailer::Base
use config.action_mailer
funciona que é uma beleza….
Agradeci ao grande monge, e segui minha viagem pelos trilhos…
então fica assim:
se for enviar email usando o gmail, seguindo o tutorial do Marcos Zimmermann em vez de:
ActionMailer::Base.default_content_type = "text/html" ActionMailer::Base.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :authentication => :plain, :domain => "sead.com", :user_name => "email@gmail.com", :password => '******'
}
use:
config.action_mailer.default_content_type = "text/html" config.action_mailer.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :authentication => :plain, :domain => "sead.com", :user_name => "email@gmail.com", :password => '******'
}
ou se você está utilizando o Tutorial do Ronaldo Melo Ferraz, em vez de usar
ActionMailer::Base.server_settings = { :address => "mail.yourdomain.com", :domain => "yourdomain.com", :user_name => "user@yourdomain.com", :password => "******", :authentication => :login }
use:
config.action_mailer.server_settings = { :address => "mail.yourdomain.com", :domain => "yourdomain.com", :user_name => "user@yourdomain.com", :password => "******", :authentication => :login } Funcionou comigo, e também vai funcionar com você!
Outras configurações (não menos importantes), podem ser feitas no arquivo config/enviroment.rb, vou demonstrar algumas delas:
config.action_mailer.delivery_method = :smtp | :sedmail | :test
Configura o modo de entrega de email.
O modo :smtp é o default do rails no modo de desenvolvimento, se quiser desabilitar o envio de email nesse modo, edite o arquivo development.rb no diretório config/enviroments e adicione a seguinte linha:
config.action_mailer.delivery_method = :test, que é o padrão no modo de teste. O email não será enviado, mas sim anexado a um array (acessível via ActionMailer::Base.deliveries)
config.action_mailer.raise_delivery_errors = true | false
se estiver setado true, todo erro que ocorrer ao enviar o email levantará uma exceção.
Obs.: nem todos os erros são imediatos
config.action_mailer.default_charset = “utf-8”
não preciso falar muito, alguém tem dúvida?
Agradeço ao Marcos Zimmermann
e ao Ronaldo M. Ferraz pelos excelentes tutoriais.