【问题标题】:ruby on rails actionmailer receive character encoding issuesruby on rails actionmailer 收到字符编码问题
【发布时间】:2012-07-14 03:51:42
【问题描述】:

Rails 3.0.11
ruby 1.9.3dev(2011-09-23 修订版 33323)[x86_64-linux]
邮件 gem v. 2.2.19
后缀 v. 2.7.0

我通过管道received emails to an actionmailer。除非收到的电子邮件没有正确编码,否则这通常效果很好。

我尝试了多种方法,但总是以 invalid byte sequence in UTF-8 错误告终。

这就是我尝试在 actionmailer 中正确编码/强制正确编码的方式:

email.text_part.decoded.force_encoding('UTF-8').encode('UTF-8', undef: :replace, invalid: :replace, replace: "")

这就是我将邮件转发到我的应用程序的方式(/etc/aliases 文件的内容,如 ruby​​ on rails 指南所建议的那样)

theaddress: "|/usr/local/rvm/bin/ruby-1.9.3-rc1 /var/www/myapp/script/rails runner -e mailer 'Mymailer.receive(STDIN.read)'"

我也尝试过首先通过iconv 发送邮件

theaddress: "|iconv -t UTF-8 -c |/usr/local/rvm/bin/ruby-1.9.3-rc1 /var/www/myapp/script/rails runner -e mailer 'Mymailer.receive(STDIN.read)'"

我也尝试过使用 Encding::Converter

Encoding::Converter.new("UTF-8//IGNORE", "UTF-8")


感谢您的任何见解和帮助!

解决方案

我必须在我的环境文件中添加以下内容:

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

我还删除了所有 force_encoding 和 encoding 方法。所以以下现在有效:

email.text_part.decoded

【问题讨论】:

  • 您应该发布您的解决方案作为答案。

标签: ruby-on-rails-3 character-encoding postfix-mta


【解决方案1】:

您确定传入电子邮件的编码是 UTF-8 吗?我的解决方案是从 header.raw_source 中获取字符集

/charset=(?<charset>[^\s]+)\s?/ =~ part.header.raw_source

如果不为空,gsub 去掉任何引号并尝试对其进行编码

charset.gsub!('"', '')
raw = part.body.to_s
raw.force_encoding(charset)
decoded = raw.encode("UTF-8")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多