ruby on rails actionmailer получает проблемы с кодировкой символов - PullRequest
2 голосов
/ 25 февраля 2012

Rails 3.0.11
ruby ​​1.9.3dev (2011-09-23 редакция 33323) [x86_64-linux]
mail gem v. 2.2.19
postfix v. 2.7.0

Я отправляю полученные письма на адрес actionmailer .Обычно это работает хорошо, если полученное письмо не закодировано неправильно.

Я пробовал несколько подходов, но всегда получаю неправильную последовательность байтов в ошибке UTF-8 .

Вот как я пытаюсь правильно закодировать / принудительно закодировать правильную кодировку в actionmailer:

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

Вот как я пересылаю почту в мое приложение (содержимое файла / etc / aliases, как предложено rubyпо направляющим)

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

Я также попытался передать почту через iconv first

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

1 Ответ

2 голосов
/ 13 июля 2012

Вы уверены, что кодировка входящей электронной почты - UTF-8? Моим решением было взять кодировку из header.raw_source

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

и, если это не ноль, скомпонуйте любые кавычки и попытайтесь закодировать это

charset.gsub!('"', '')
raw = part.body.to_s
raw.force_encoding(charset)
decoded = raw.encode("UTF-8")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...