我正在尝试使用 ActionMailer 发送其中包含非 ASCII 字符的 text/plain
电子邮件。但是,一封电子邮件的内容为:
“This has smart quotes”
在电子邮件(和日志)中显示为:
=E2=80=9CThis has smart quotes=E2=80=9D
电子邮件的Content-Transfer-Encoding
是quoted-printable
。在 View 中,此文本呈现如下:
<%= raw(strip_tags(@message)) %>
我不确定这是在哪里发生的,电子邮件的 charset
header 是 UTF-8。这是 Ruby 1.9.3-p194 和 Rails 3.2.11。
最佳答案
我知道这有点老了,但实际上我上周才遇到这个问题,所以我将把我的发现放在这里,以防其他人有这个问题。
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 字符,所以请注意。
关于ruby-on-rails - ActionMailer 非 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245335/