2

我最近加入了一个项目,每个客户都有自己的自定义 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 电子邮件.

删除此显式 content_type 后,图像已正确附加,但内联图像未显示(使用附加图像将占位符替换为 image_tag),因为内容似乎没有被解释为 HTML,例如电子邮件的内容是:

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

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

4

1 回答 1

5

即使是动态内容;让导轨为您完成繁重的工作。将内容传递到要呈现的空视图模板而不是将正文传递给 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 的客户端也正确呈现它。

于 2013-09-03T11:42:17.327 回答