2

我构建了一个 api only rails 应用程序,但由于我使用的是 3rd 方电子邮件服务,我需要能够将电子邮件模板呈现为字符串以将其传递给邮件服务包装器 gem。到目前为止,任何将模板呈现为字符串的尝试都会返回一个空字符串,我怀疑这是因为应用程序仅配置为 API。如何添加对将模板呈现为字符串的支持?

如果不是这种情况,请告诉我。我正在使用邮戳邮件服务。postmark-rails集成到标准 Rails 邮件程序中的 gem 根本不起作用,而普通postmarkgem(使用邮戳 API 而不是邮戳 SMTP 服务器)工作正常,但现在我的问题是为电子邮件生成正确的 html。

这就是我正在尝试的:

html = render_to_string(
            partial: "transfer_mailer/transfer.html.erb",
            locals: {
                :@body => @body,
                :@campaign => @campaign,
                :@chat => @chat
                }
        )

但它返回空字符串。

我的设置涉及Rails 5.0.1, ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux],Sidekiq 4.2.7和 在生产中使用nginx/1.10.2and Phusion Passenger 5.1.1。生产环境部署在 Azure 虚拟机中,我添加了入站和出站规则以允许流量通过端口 25、465、2525 和 587。

任何帮助将非常感激。

4

2 回答 2

0

查看 文档render_to_string,看起来路径不需要包含.html.erb,所以也许删除它会修复它。

您可以在此处查看一些示例代码:

在您的情况下,它将是:

   render_to_string(
       partial: '/transfer_mailer/transfer',
        locals: {
            :@body => @body,
            :@campaign => @campaign,
            :@chat => @chat
        },
       layout: false
    )

还要确保部分文件名以下划线开头,即使您没有在render_to_stringorrender调用中包含它。

于 2016-12-27T19:49:18.427 回答
0

还有另一种方法可以render_to_string用来解决您的问题。请看下面的代码。

@body = XXX
@campaign = YYY
@chat = ZZZ
html = render_to_string(
  file: 'transfer_mailer/transfer.html.erb'
)

希望能帮助到你。

于 2016-12-28T09:36:11.117 回答