ActionMailer 3 без Rails
Я пишу небольшую программу Ruby, которая будет извлекать записи из базы данных и ежедневно отправлять HTML-письмо. Я пытаюсь использовать ActionMailer 3.0.3 для этого, но у меня есть проблемы. Все поиски, которые я делал до сих пор при использовании ActionMailer за пределами Rails, относятся к версиям до версии 3. Может ли кто-нибудь указать мне в правильном направлении, где найти ресурсы о том, как это сделать? Здесь, где я до сих пор находился в моем почтовом файле:
# 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
Я определенно зациклился на том, где поставить свои взгляды. Каждая попытка, которую я сделал, чтобы сообщить ActionMailer, где мои шаблоны не удалось,
Думаю, я должен спросить, есть ли другой способ сделать эту программу. В принципе, я делаю все с нуля на этом этапе. Очевидно, что делает Rails удивительным, это соглашение, поэтому пытается использовать части Rails сами по себе пустую трату времени? Есть ли способ получить Rails-подобную среду без создания полномасштабного приложения Rails?
Ответы
Ответ 1
После некоторой серьезной отладки я нашел, как ее настроить.
файл 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
файл mailer/daily_email.html.erb
<p>this is an html email</p>
<p> and this is a variable <%= @var %> </p>
файл mailer/daily_email.text.erb
this is a text email
and this is a variable <%= @var %>
Хороший вопрос! Это помогло мне понять, как работает Rails 3:)
Ответ 2
Мне потребовалось некоторое время, чтобы заставить это работать в (не) Rails 4. Я подозреваю это просто потому, что у меня есть: require = > false 'по всему моему Gemfile, но мне нужно было добавить следующее, чтобы сделать это работа:
require 'action_view/record_identifier'
require 'action_view/helpers'
require 'action_mailer'
Без вышеуказанного кода я продолжал получать NoMethodError с undefined method 'assign_controller'
.
После этого я настроил ActionMailer следующим образом:
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
]
Шаблоны идут в lib/<GEM_NAME>/views/mailers/<MAILER_CLASS_NAME>/<MAILER_ACTION_NAME>.erb
(MAILER_ACTION_NAME - это метод общедоступного экземпляра вашего почтового класса, который вы вызываете для отправки электронной почты).
Наконец, не забудьте поместить это в свой spec_helper
:
ActionMailer::Base.delivery_method = :test