У меня есть сайт, написанный на рубине 1.8.5 и рельсах 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

Проблема в том, что когда сообщение отправлено, его тема выглядит так: =? Utf-8? Q? = D0 = 9e = d0 = b1 = d1 = 80 = d0 = b0 = d1 = 82 = d0 = bd = d0 = b0 = d1 = 8f_ = d1 = 81 = d0 = b2 = d1 = 8f = d0 = b7 = d1 = 8c = 3a_ = d0 = a1 = d0 = be = d1 = 82 = d1 = 80 = d1 = 83 = d0 = b4 = d0 = bd = d0 = b8 = d0 = ba_ = d0 = be = d1 = 82 = d0 = b2 = d0 = b5 = d1 = 82 = d0 = b8 = d0 = bb_ = d0 = bd = d0 = b0_ = d0 = b2 = d0 = be = d0 = bf = d1 = 80 = d0 = be = d1 = 81_ = d0 = ba = d0 = bb = d0 = b8 = d0 = b5 = d0 = bd = d1 = 82 = d0 = b0_ = 23 = 35 = 36_ = d0 = be = d1 = 82_ = 32 = 36 = 2e = 30 = 38 = 2e = 32 = 30 = 31 = 31_ = 31 = 31 = 3a = 33 = 33? =

Поэтому он закодирован по URL-адресу.

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

0
Andrey Eremin 29 Авг 2011 в 17:05

2 ответа

Лучший ответ

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

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

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

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

Прочтите RFC или посмотрите статью в Википедии о Unicode и электронной почте .

2
Holger Just 29 Авг 2011 в 13:38

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

Ознакомьтесь с документацией по API

0
Ariel Lopez 13 Дек 2014 в 00:07