ActionMailer 3 sin carriles
Estoy escribiendo un pequeño programa Ruby que extraerá registros de una base de datos y enviará un correo electrónico HTML diariamente. Estoy tratando de usar ActionMailer 3.0.3 para esto, pero me estoy ejecutando en los problemas. Toda la búsqueda que he hecho hasta ahora sobre el uso de ActionMailer fuera de Rails se aplica a las versiones anteriores a la versión 3. ¿Podría alguien indicarme en la dirección correcta 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 he hecho para decirle a ActionMailer dónde están mis plantillas ha fallado.
Supongo que también debería preguntar si hay una manera diferente de llevar a cabo este programa. Básicamente, estoy haciendo todo desde cero en este punto. Obviamente, lo que hace que Rails sea impresionante es su convención, por lo que tratar de usar partes de Rails por su cuenta es una pérdida de tiempo? ¿Hay alguna manera de obtener el entorno similar a Rails sin crear una aplicación Rails completa?
2 answers
Después de una depuración seria, encontré cómo configurarlo.
File 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.texto.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:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-12 12:05:44
Me llevó un tiempo hacer que esto funcionara en (non-)Rails 4. Sospecho que es solo porque tengo': require => false ' en todo mi Gemfile, pero necesitaba agregar lo siguiente para que funcionara:
require 'action_view/record_identifier'
require 'action_view/helpers'
require 'action_mailer'
Sin el código anterior, seguí obteniendo un NoMethodError con 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 al que llama para enviar la correo).
Por último, no olvides poner esto en tu spec_helper
:
ActionMailer::Base.delivery_method = :test
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-31 16:37:34