我最近加入了一个项目,每个客户都有自己的自定义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似乎搞乱了):
在删除此显式content_type时,图像已正确附加,但未显示内嵌图像(使用附加图像替换占位符以获取image_tag),因为内容似乎不会被解释为HTML,例如,电子邮件的内容是:
Dolor eligendi doloremque et.
<img alt="Signature Image" src="cid:5225b25b53818_b4213fc5ce0349d0975f@localhost.mail" />
如何让电子邮件正确地将内容解释为HTML而不会弄乱内嵌图像内容类型?
答案 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的客户端呈现它,以便正确呈现它。