ruby-on-rails - ActionMailer 非 ASCII 字符

标签 ruby-on-rails encoding actionmailer

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

“This has smart quotes”

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

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

电子邮件的Content-Transfer-Encodingquoted-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/

相关文章:

ruby-on-rails - Rails 迁移将当前日期设置为默认值

ruby-on-rails - 如何使用MongoDB查询今天创建的文档?

java - 为什么 UTF-8 编码在简单的 Java 项目中可以工作,但在 Android 中却不起作用?

visual-studio-2010 - 在 TFS 中合并文件时如何避免编码冲突?

ruby-on-rails-4 - url_for 在 rails 4 中的 rake 任务发送的电子邮件中

ruby-on-rails - Gmaps4rails2 上标记中的 Rails 监听器

javascript - 除非重新加载,否则下拉菜单在某些页面上不起作用

javascript - 将 JSON 响应转换为 JavaScript 中的正确编码

ruby-on-rails - 我们如何在 ruby​​ on rails 中使用 actionmailer 每小时发送 5000 封电子邮件?

ruby-on-rails - 如何使用 rspec 测试 ActionMailer Deliver_later