rails generate ruby ruby-on-rails-3 actionmailer

ruby - rails generate email



ActionMailer 3 sin rieles (2)

Estoy escribiendo un pequeño programa de Ruby que extraerá registros de una base de datos y enviará un correo electrónico HTML todos los días. Intento utilizar ActionMailer 3.0.3 para esto, pero me estoy quedando sin problemas. Toda la búsqueda que hice hasta ahora usando ActionMailer fuera de Rails se aplica a versiones anteriores a la versión 3. ¿Podría alguien señalarme en la dirección correcta de dónde encontrar recursos sobre cómo hacer esto? Aquí es donde estoy hasta ahora en mi archivo de correo:

# lib/bug_mailer.rb require ''action_mailer'' ActionMailer::Base.delivery_method = :file class BugMailer < ActionMailer::Base def daily_email mail( :to => "[email protected]", :from => "[email protected]", :subject => "testing mail" ) end end BugMailer.daily_email.deliver

Definitivamente estoy atascado en dónde poner mis puntos de vista. Cada intento que hice para decirle a ActionMailer dónde han fallado mis plantillas.

Creo que también debería preguntar si hay una manera diferente de lograr este programa. Básicamente, estoy haciendo todo desde cero en este punto. Obviamente, lo que hace que Rails sea increíble es su convención, ¿entonces está tratando de usar partes de Rails por su propia cuenta como una pérdida de tiempo? ¿Hay alguna manera de obtener el entorno similar a Rails sin crear una aplicación de Rails en toda regla?


Después de una depuración seria, encontré cómo configurarlo.

archivo mailer.rb

require ''action_mailer'' ActionMailer::Base.raise_delivery_errors = true ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :domain => "domain.com.ar", :authentication => :plain, :user_name => "[email protected]", :password => "passw0rd", :enable_starttls_auto => true } ActionMailer::Base.view_paths= File.dirname(__FILE__) class Mailer < ActionMailer::Base def daily_email @var = "var" mail( :to => "[email protected]", :from => "[email protected]", :subject => "testing mail") do |format| format.text format.html end end end email = Mailer.daily_email puts email email.deliver

file mailer / daily_email.html.erb

<p>this is an html email</p> <p> and this is a variable <%= @var %> </p>

file mailer / daily_email.text.erb

this is a text email and this is a variable <%= @var %>

¡Buena pregunta! Me ayudó a entender un poco más cómo funciona Rails 3 :)


Me tomó un tiempo lograr que esto funcione en (no) Rails 4. Sospecho que es solo porque tengo '': require => false'' en todo mi Gemfile, pero necesitaba agregar lo siguiente para que funcione:

require ''action_view/record_identifier'' require ''action_view/helpers'' require ''action_mailer''

Sin el código anterior, seguí obteniendo un NoMethodError con el undefined method ''assign_controller'' .

Después de eso, configuré ActionMailer de la siguiente manera:

ActionMailer::Base.smtp_settings = { address: ''localhost'', port: ''25'', authentication: :plain } ActionMailer::Base.default from: ''[email protected]'' ActionMailer::Base.raise_delivery_errors = true ActionMailer::Base.logger = Logger.new(STDOUT) ActionMailer::Base.logger.level = Logger::DEBUG ActionMailer::Base.view_paths = [ File.join(File.expand_path("../../", __FILE__), ''views'', ''mailers'') # Note that this is an Array ]

Las plantillas van en lib/<GEM_NAME>/views/mailers/<MAILER_CLASS_NAME>/<MAILER_ACTION_NAME>.erb (MAILER_ACTION_NAME es el método de instancia pública de su clase de correo a quien llama para enviar el correo electrónico).

Por último, no olvides poner esto en tu spec_helper :

ActionMailer::Base.delivery_method = :test