2

我有一个使用 Actionmailer 发送邮件的 RubyOnRails 3.2.x 应用程序。

代码是这样的:

class Mymailer < ActionMailer::Base

    def sendout
        mail(:to->"someone@somewhere.com", :from ...........
    end

end

我不想发送该电子邮件,而是希望将其呈现为一个字符串,然后我计划以不同的方式处理

PS:在我的具体情况下,我想将该字符串传递给 Node.JS 服务器,该服务器将实际发送邮件,我使用 RubyOnRails 来处理多语言支持和数字格式(是的,我有多个模板用于不同的我支持的语言)。

4

2 回答 2

4

由于 Ruby 不会发送电子邮件,因此无需使用Mailer.

理想情况下,您可以生成电子邮件的JSON字符串表示形式,例如:

# at the top of the file
require 'json'

# then in your method
json_string = { 
  :to => "email@example.com",
  :from =>"sender@example.com",
  :body => "this is the body"
}.to_json

然后将此字符串从(例如)您的控制器或当前正在调用您的邮件程序的任何东西发布到您的 node.js 服务器。

但是,由于您想使用拉入 DB 字段并使用 Rails 的 i18n 功能的模板来呈现电子邮件,因此您可以使用Mailer但将结果呈现为如下字符串:

mail(to: "mail@example.com") do |format|
  format.html do
    string = render_to_string("your_template")

    call_node_js(string)
  end
end
于 2013-09-04T13:43:56.083 回答
0

如果您想要获取整个邮件表示形式,包括标头,那么您可能需要浏览源代码以查看幕后发生的情况。

一个好的起点是ActionMailer::Base方法#mail(Rails 4):
http ://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail

无论如何,如果发送是由 Node.js 处理的,则不需要这样做。只需像 Olly 建议的那样构建一个 JSON 对象并传递它。

于 2013-09-04T13:50:15.467 回答