Rails Mailer自定义动态内容

时间:2013-09-03 11:28:08

标签: html ruby-on-rails email dynamic actionmailer

我最近加入了一个项目,每个客户都有自己的自定义HTML内容,用于发送给客户的电子邮件。

它通过将内容插入带有自定义标签的字符串,然后通过在邮件程序中设置body属性来发送,如下所示:

mail(:from         => from_email,
     :reply_to     => from_email,
     :to           => to_email,
     :subject      => subject,
     :body         => (html_text.empty?) ? plain_text : html_text,
     :content_type => (html_text.empty?) ? 'text/plain' : 'text/html',
    )

要添加的一项功能是包含内嵌图像;但是 - 通过手动将content_type设置为'text / plain'或'text / html',电子邮件无法正确呈现,并且图像也无法正确附加(整个电子邮件的content_type似乎搞乱了):  messed up content_type email

在删除此显式content_type时,图像已正确附加,但未显示内嵌图像(使用附加图像替换占位符以获取image_tag),因为内容似乎不会被解释为HTML,例如,电子邮件的内容是:

Dolor eligendi doloremque et.
<img alt="Signature Image" src="cid:5225b25b53818_b4213fc5ce0349d0975f@localhost.mail" />

如何让电子邮件正确地将内容解释为HTML而不会弄乱内嵌图像内容类型?

1 个答案:

答案 0 :(得分:4)

即使是动态内容;让rails为你做繁重的工作。将内容传递到要呈现的空视图模板而不是将主体传递给mail方法意味着所有内容类型都是隐式设置的。

之后,邮件程序不应直接传递内容,只留下:

mail(:from         => from_email,
     :reply_to     => from_email,
     :to           => to_email,
     :subject      => subject
     )

或试试这个,

 mail(:from => from_email,:reply_to => from_email) do |format|
       format.html { render 'another_template' }
       format.text { render 'another_template' }
 end 

它将创建包含html和文本部分的多部分电子邮件。这将允许纯文本客户端使用该部分和基于html的客户端呈现它,以便正确呈现它。