У меня есть сайт, написанный на рубине 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
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 и электронной почте .
Я решил свою проблему, добавив по умолчанию Content-Transfer-Encoding => 7bit в свой ActionMailer
Ознакомьтесь с документацией по API
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.