2013-01-09 136 views
2

我试图发送text/plain带有ActionMailer的电子邮件,其中包含非ASCII字符。然而,随着内容的电子邮件:ActionMailer非ASCII字符

“This has smart quotes” 

显示在电子邮件(和日志)为:

=E2=80=9CThis has smart quotes=E2=80=9D 

和电子邮件的Content-Transfer-Encodingquoted-printable。在视图中,该文本呈现,像这样:

<%= raw(strip_tags(@message)) %> 

我不知道在哪里发生这种情况,电子邮件的charset头是UTF-8。这是Ruby 1.9.3-p194和Rails 3.2.11。

回答

3

我知道这有点旧了,但上周我刚刚遇到了这个问题,所以我会把我的发现放在这里,以防其他人有这个问题。

ActionMailer取决于邮件宝石(https://github.com/mikel/mail)。邮件遵守RFC2822中的非多部分电子邮件。符合RFC2822意味着它只允许US-ASCII字符或字符在1-126 dec范围内。因此,您所看到的是邮件宝石检查您的邮件正文并找到8位字符,因此它将Content-Transfer-Encoding设置为quoted-printable,将非US-ASCII字符转换为它们的十六进制等效字符(E2 80 9C/E2 80 9D |“/ “|左/右双引号)。如果你想发送非ASCII字符的电子邮件,你可以将content_transfer_encoding设置为8位。

mail = Mail.new 
mail.transport_encoding = "8bit" 
mail.deliver 

虽然可能存在的邮件服务器将拒绝您的电子邮件,因为它包含非US-ASCII字符,因此应予以通知。