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

Как отправить почту с рельсами без шаблона?

В моем проекте Rails 3 я хочу отправить несколько простых уведомлений. Мне не нужно создавать шаблон для них или делать какую-либо логику. Я просто хочу уволить их из разных мест в системе.

Если бы я делал это в произвольном рубине script, я использовал бы pony. Тем не менее, я хотел бы использовать почтовые службы и конфигурацию рельсов, чтобы получить такую ​​же надежность и настройку, которые у меня есть для остальной части почты в моей системе.

Какой самый простой способ сделать это? В идеале был бы такой метод, как

ActionMailer.send(:to => '[email protected]', :subject =>"the subject", :body =>"this is the body")
4b9b3361

Ответ 1

Самый простой способ отправить почту в rails 3 без шаблона - это вызвать метод mail ActionMailer::Base, за которым следует метод deliver,

Например, следующее послало бы обычный текстовый e-mail:

ActionMailer::Base.mail(from: "[email protected]", to: "[email protected]", subject: "test", body: "test").deliver

http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail дает вам все параметры заголовка, а также идеи о том, как отправить многостраничное/альтернативное электронное письмо с текстом/текстом и текстом/html.

Ответ 2

Здесь - небольшой пример из Rails Guides, который использует метод render. Я не пробовал, но если он работает как render в cotrollers, вы можете просто использовать:

render :text => "Your message"

или

render :text => my_message

Где my_message - параметр.

Вы можете просто обернуть его методом, который вы можете вызвать из любого места, которое вы хотите.

Обновлено Rails 3.2.8

В этой версии Rails мне пришлось сделать это вот так:

def raw_email( email, subject, body )
  mail(
    :to => email,
    :subject => subject
  ) do |format|
    format.text { render :text => body }
  end
end

Ответ 3

Вы можете попробовать что-то вроде этого:

class Notifier < ActionMailer::Base
  def send_simple_message(options)
    mail(options.except(:body)) do |format|
      format.text { render :text => options[:body] }
    end.deliver
  end
end