红宝石-如何在没有模板的情况下使用Rails发送邮件?

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

如果我在任意的红宝石脚本中执行此操作,则将使用pony。 但是,我仍然想使用Rails邮件功能和配置,以便获得与系统中其余邮件相同的可靠性和设置。

最简单的方法是什么? 理想情况下,应该有一些类似的方法

ActionMailer.send(:to => 'foo@example.com', :subject =>"the subject", :body =>"this is the body")
John Bachir asked 2020-08-05T19:59:37Z
4个解决方案
103 votes

在没有模板的rails 3中发送邮件的最简单方法是直接调用ActionMailer::Basemail方法,然后再调用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]提供了所有标题选项,并提供了有关如何发送带有文本/纯文本和文本的多部分/替代电子邮件的想法 / html直接。

KMG answered 2020-08-05T19:59:52Z
9 votes

这是Rails Guides中使用my_message方法的小示例。 我没有尝试过,但是如果它在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
klew answered 2020-08-05T20:00:36Z
7 votes

您可以尝试如下操作:

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
John Douthat answered 2020-08-05T20:00:56Z
4 votes

Rails 5用户可能会发现接受的答案(使用mail())无效; 至少我遇到了一个例外,因为Rails在寻找视图。

事实证明,Rails指南中有一个名为“不使用模板渲染发送电子邮件”的部分,所有需要做的就是向mail()提供:content_type和:body选项。

class UserMailer < ApplicationMailer
  def welcome_email
    mail(to: params[:user].email,
         body: params[:email_body],
         content_type: "text/html",
         subject: "Already rendered!")
  end
end
arooaroo answered 2020-08-05T20:01:21Z
translate from https://stackoverflow.com:/questions/4916557/how-can-i-send-mail-with-rails-without-a-template