ActionMailer非ASCII字符

时间:2013-01-09 19:54:00

标签: ruby-on-rails encoding actionmailer

我正在尝试发送带有非ASCII字符的ActionMailer的text/plain封电子邮件。但是,电子邮件的内容为:

“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。

1 个答案:

答案 0 :(得分:3)

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

ActionMailer依赖于邮件gem(https://github.com/mikel/mail)。对于非多部分电子邮件,邮件遵守RFC2822。 RFC2822兼容意味着它仅允许US-ASCII字符或1-126 dec范围内的字符。因此,您所看到的是邮件gem检查您的邮件正文并找到8位字符,因此它将Content-Transfer-Encoding设置为引用可打印的非US-ASCII字符转换为其十六进制等效值(E2 80 9C / E2 80 9D |“/ “|左/右双引号分别)。如果您希望发送带有非ASCII字符的电子邮件,可以将content_transfer_encoding设置为8bit。

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

虽然可能存在拒绝您的电子邮件的邮件服务器,因为它包含非US-ASCII字符,因此请注意。

相关问题