2

我正在尝试text/plain使用包含非 ASCII 字符的 ActionMailer 发送电子邮件。但是,一封包含以下内容的电子邮件:

“This has smart quotes”

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

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

并且Content-Transfer-Encoding电子邮件是quoted-printable. 在视图中,此文本呈现如下:

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

我不确定这是在哪里发生的,charset电子邮件的标题是 UTF-8。这是 Ruby 1.9.3-p194 和 Rails 3.2.11。

4

1 回答 1

4

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

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 设置为 8 位。

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

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

于 2013-04-08T01:44:43.020 回答