Подтвердить что ты не робот

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?

4b9b3361

Ответ 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