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.