如何在没有模板的情况下使用rails发送邮件?

时间:2011-02-06 22:15:22

标签: ruby-on-rails ruby email actionmailer

在我的Rails 3项目中,我想发送一些简单的通知电子邮件。我不需要为它们制作模板或做任何逻辑。我只是想从系统的各个地方解雇它们。

如果我在任意ruby脚本中执行此操作,我将使用pony。但是,我仍然希望使用rails邮件设施和配置,这样我就可以获得与系统中其余邮件相同的可靠性和设置。

最简单的方法是什么?理想情况下会有一些像

这样的方法
ActionMailer.send(:to => 'foo@example.com', :subject =>"the subject", :body =>"this is the body")

3 个答案:

答案 0 :(得分:100)

在没有模板的情况下在rails 3中发送邮件的最简单方法是直接调用mail ActionMailer::Base方法,然后调用deliver方法,

例如,以下内容将发送纯文本电子邮件:

ActionMailer::Base.mail(from: "me@example.com", to: "you@example.com", subject: "test", body: "test").deliver

http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail为您提供所有标题选项以及有关如何直接发送包含text / plain和text / html部分的多部分/备用电子邮件的想法。

答案 1 :(得分:10)

Here是使用render方法的Rails指南中的一个小例子。我没有尝试过,但如果它在cotrollers中用作render,那么你可以使用:

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

答案 2 :(得分:7)

您可以尝试这样的事情:

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