Преобразовать заголовок письма в другую кодировку в ActionMailer в Ruby - PullRequest
0 голосов
/ 29 августа 2011

У меня есть сайт, написанный на ruby ​​1.8.5 и rails 1.2.6.

Есть страница обратной связи.

Итак.

У меня есть класс модели:

class Feedback::Notify < ActionMailer::Base
  def answer_for_managers(question)
    recipients test@test.com
    from       "feedback@test.com"
    subject    "Обратная связь: ответ на вопрос"
    body       "question" => question
    content_type "text/html"    
  end
end

Тогда у меня есть контроллер:

class Feedback::QuestionController < Office::BaseController
  def update
      Feedback::Notify.deliver_answer_for_managers(@question)
  end
end

Проблема в том, что когда сообщение отправляется, его тема выглядит следующим образом:d0 = шд = d0 = b0 = d1 = 8f_ = d1 = 81 = d0 = b2 = d1 = 8f = d0 = b7 = d1 = 8с = 3a_ = d0 = a1 = d0 = быть = d1 = 82 = d1 = 80 =d1 = 83 = d0 = b4 = d0 = шд = d0 = B8 = d0 = ba_ = d0 = быть = d1 = 82 = d0 = b2 = d0 = b5 = d1 = 82 = d0 = B8 = d0 = bb_ = d0 =шд = d0 = b0_ = d0 = b2 = d0 = быть = d0 = бф = d1 = 80 = d0 = быть = d1 = 81_ = d0 = Ьа = d0 = бб = d0 = B8 = d0 = b5 = d0 = шд =d1 = 82 = d0 = b0_ = 23 = 35 = 36_ = d0 = быть = d1 = 82_ = 32 = 36 = 2e = 30 = 38 = 2e = 32 = 30 = 31 = 31_ = 31 = 31 = 3a = 33 =33? =

, поэтому он закодирован в URL.

Есть ли способ предотвратить преобразование текста темы в кодировку URL?Все файлы в кодировке UTF8

Ответы [ 2 ]

2 голосов
/ 29 августа 2011

Если вы поместите неэкранированные символы UTF-8 в поля заголовка, вы нарушите соответствующие стандарты RFC 822 и RFC 5322 , которые утверждают, что поля заголовка могут состоять только из (7-разрядные) символы ASCII.

Таким образом, ActionMailer делает все правильно и экранирует символы UTF-8. Поскольку в заголовках ничего не говорится о том, что должна использоваться другая кодировка, у получателя (и всех промежуточных серверов) нет другого шанса, кроме как следовать этому стандарту, поскольку у него нет другого понятия, какая кодировка могла бы быть использована.

Поскольку RFC 822 довольно старый (но все еще авторитетный для электронной почты), UTF-8 просто не существует, как было указано. Экранирование - это обходной путь, заданный RFC 2047 , который точно указывает, что вы видите в заголовке. Ожидается, что MUA освободят текст и отобразят правильные символы при рендеринге.

Обратите внимание, что можно полностью отправлять текст в юникоде внутри тела сообщения (большую часть времени внутри контейнера MIME). Там можно указать фактическую кодировку данных и транспортную кодировку, используя дополнительные заголовки. См. RFC 2045 ff. для более подробной информации.

Пожалуйста, прочитайте либо RFC, либо загляните в статью в Википедии по Юникод и электронная почта .

0 голосов
/ 12 декабря 2014

Я решаю свою проблему, добавив по умолчанию «Content-Transfer-Encoding» => «7bit» в мой ActionMailer

посмотрите в API документах

...