ActionMailer HTML编码地狱 - 特殊字符替换为垃圾

时间:2012-12-18 19:33:41

标签: ruby-on-rails ruby encoding utf-8 actionmailer

我有UTF-8字符串:Website • Facebook
这是中间名为•0xE2 0x80 0xA2

的子弹

此值正确存储在数据库中,并使用Rails 3和ruby 1.9.3使用默认设置在屏幕上正确显示。

我试图通过HTML电子邮件发送此邮件,但当完成所有操作后,接收端会看到垃圾邮件:

enter image description here

这背后的代码很简单,我有一个ActionMailer子类(默认使用UTF-8)设置,在布局中发送带有UTF-8内容编码的HTML电子邮件:

email.html.erb布局文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="chrome=1,IE=9" />       
    <meta charset="utf-8">
    <%= stylesheet_link_tag "application", :media => "all" %>       
</head>
<body class='email'>
    <%= yield %>                        
</body>
</html>

内容使用与呈现网页相同的视图,重要的一行是:

<p><%= simple_format strip_tags(comment.text) %></p>

我尝试了force_encodingencode的许多排列,将冗余的UTF-8编码应用于ActionMailer子类,视图文件的顶部以及其他十几种内容,但似乎没什么用。

the raw html message通过Apple Mail查看的重要HTML是:

Website =EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD Facebook

如果您查看原始邮件(上面链接),则不会在纯文本邮件上发生,只会发生HTML邮件。

TL; DR

ActionMailer正在替换应该是UTF-8子弹角色:0xE2 0x80 0xA2
垃圾:0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

检查您是否使用gem来内联CSS,例如premailer-rails3

According to this post,这可能会损坏您的ActionMailer电子邮件中的UTF-8字符。

尝试使用actionmailer_inline_css gem之类的东西删除或替换宝石。