Как отправить почту с рельсами без шаблона?
В моем проекте Rails 3 я хочу отправить несколько простых уведомлений. Мне не нужно создавать шаблон для них или делать какую-либо логику. Я просто хочу уволить их из разных мест в системе.
Если бы я делал это в произвольном рубине script, я использовал бы pony. Тем не менее, я хотел бы использовать почтовые службы и конфигурацию рельсов, чтобы получить такую же надежность и настройку, которые у меня есть для остальной части почты в моей системе.
Какой самый простой способ сделать это? В идеале был бы такой метод, как
ActionMailer.send(:to => '[email protected]', :subject =>"the subject", :body =>"this is the body")
Ответы
Ответ 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