Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用rails发送没有模板的邮件?_Ruby On Rails_Ruby_Email_Actionmailer - Fatal编程技术网

Ruby on rails 如何使用rails发送没有模板的邮件?

Ruby on rails 如何使用rails发送没有模板的邮件?,ruby-on-rails,ruby,email,actionmailer,Ruby On Rails,Ruby,Email,Actionmailer,在我的Rails3项目中,我想发送一些简单的通知电子邮件。我不需要为他们制作模板或做任何逻辑。我只想从系统的各个地方发射它们 如果我在任意ruby脚本中执行此操作,我将使用。但是,我仍然希望使用rails邮件设施和配置,以便获得与系统中其余邮件相同的可靠性和设置 最简单的方法是什么?理想情况下会有类似的方法 ActionMailer.send(:to => 'foo@example.com', :subject =>"the subject", :body =>"this is

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

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

最简单的方法是什么?理想情况下会有类似的方法

ActionMailer.send(:to => 'foo@example.com', :subject =>"the subject", :body =>"this is the body")
这是Rails指南中的一个小例子,它使用了
render
方法。我没有尝试过,但是如果它在cotrollers中作为
渲染
,那么您可以使用:

render :text => "Your 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
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

您可以尝试以下方法:

def raw_email( email, subject, body )
  mail(
    :to => email,
    :subject => subject
  ) do |format|
    format.text { render :text => body }
  end
end
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
类通知程序options[:body]} 完 结束 结束
在rails 3中不使用模板发送邮件的最简单方法是调用
ActionMailer::Base的
mail
方法,然后直接调用
deliver
方法

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

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

提供所有标题选项,以及如何直接发送包含text/plain和text/html部分的多部分/备选电子邮件的想法。

Rails 5用户可能会发现接受的答案(使用
format.text{…}
)不起作用;至少我得到了一个例外,因为Rails正在寻找一个视图

事实证明,Rails指南中有一个部分名为,只需为
mail()
提供:content\u 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
class UserMailer
您使用的是Rails 2.3还是3.0?我考虑过这一点。它非常简单,但仍然需要使用方法创建
ActionMailer
模型。我希望有更简单的东西,但如果没有,这是最好的选择。如果你正在发送邮件到gmail,别忘了从邮件头添加。我花了一个小时弄清楚为什么我的邮件没有送达,这就是原因。如果ActionMailer附带了这样一个“默认通知程序”,那就太酷了。也许我应该做一块宝石……我认为,
deliver
不应该是梅勒的方法。相反,它应该在使用mailer时调用,就像默认的mailer usageThis非常棒,我可以确认它在Rails 4和Rails 5.1.0中也可以工作