ActionMailer非ASCII字符

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

 “This has smart quotes” 

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

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

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

  

我不确定这是怎么charset ,电子邮件的charset标题是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字符转换为其hex等效值(E2 80 9C / E2 80 9D |“/ “|左/右双引号分别)。 如果您希望发送带有非ASCII字符的电子邮件,可以将content_transfer_encoding设置为8bit。

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

虽然可能存在邮件服务器因为它包含非US-ASCII字符而拒绝您的电子邮件消息,因此建议使用。