我想让邮件中的正文全部由变量传递进来,并且在邮件发出去时,能够保留变量的 HTML 格式。
邮件模板是这样的(部分):
<body>
<%= @body.html_safe %>
</body>
现在的问题是在发出来的邮件的正文中,HTML 部分都直接显示出来了,而没有被解析。就像这样:
<p>如果你愿意参与试用,请知晓并遵守以下事项:</p>
请问此问题该如何解决?
看起来像是把 HTML 格式的邮件当作文本格式发出去了。
http://api.rubyonrails.org/classes/ActionMailer/Base.html
The mail method, if not passed a block, will inspect your views and send all the views with the same name as the method, so the above action would send the welcome.text.erb view file as well as the welcome.text.html.erb view file in a multipart/alternative email.
所以修改一些邮件模板的后缀名,改成 finename.text.html.erb 试试看。
谢谢 Daniel,补充一些信息:
1.模板的确是.html.erb 格式的;
2.body 标签里面还有一些其它的 HTML 标签,并且引入了 partial,这两部分的 HTML 都被正确的处理了;
3.只有这个@body
变量不行。
这里是这个模板 body 部分的代码:
<body>
<%= @body.html_safe %>
<%= render "user_mailer/sender" %>
<%= render partial: "user_mailer/unsubscribe", locals: {user: @user, notification_type: @notification} %>
</body>
@body
是从 emails_controller 的表单中提交上来的。
提交上来后,我会把它记录到数据库里,然后生成邮件并发出去。
我刚才看了一下数据库中的记录,看起来没问题:
e.body
=> "<p>你好,我们邀请你首先试用
感谢各位,问题已解决!
做法是不要给 dj 传递要发送的@body
变量,而是把整个email
对象都丢给它,这样它就不会过滤 HTML 了。
原来是:
UserMailer.delay(run_at: interval.seconds.from_now).dm(r, self.title, self.body)
现在是:
UserMailer.delay(run_at: interval.seconds.from_now).dm(r, self)