在Ruby中的ActionMailer中将电子邮件的标题转换为另一种编码

时间:2011-08-29 13:05:24

标签: ruby-on-rails ruby encoding actionmailer

我有一个写在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

问题是当发送消息时其主题如下:=?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 =是= D1 = 82 = D1 = 80 = D1 = 83 = D0 = B4 = D0 = BD = D0 = B8 = D0 = ba_ = D0 =是= D1 = 82 = D0 = B2 = D0 = B5 = D1 = 82 = D0 = B8 = D0 = bb_ = D0 = BD = D0 = b0_ = D0 = B2 = D0 =是= D0 = BF = D1 = 80 = D0 =是= D1 = 81_ = D0 = BA = D0 = BB = D0 = B8 = D0 = B5 = D0 = BD = 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-encoding? 所有文件都采用UTF8编码

2 个答案:

答案 0 :(得分:2)

如果你将未转义的UTF-8字符放入标题字段,你将违反相应的标准RFC 822RFC 5322,它们表明标题字段只能由(7位)ASCII组成字符。

因此,ActionMailer在这里做了正确的事情并且逃脱了UTF-8字符。由于标题中没有任何内容表明要使用另一种编码,因此接收者(以及所有中间服务器)除了遵循该标准之外没有其他机会,因为他们没有其他线索可能已经使用了哪种编码。

由于RFC 822相当陈旧(但仍然是电子邮件的权威),因此UTF-8并不像指定的那样存在。转义是RFC 2047指定的解决方法,它确切地指定了您在标题中看到的内容。预计MUA会在文本中取消浏览并在渲染时显示正确的字形。

请注意,完全可以在邮件正文中发送unicode文本(大部分时间都在MIME容器中)。可以使用附加标头指定实际数据编码和传输编码。见RFC 2045 ff。了解更多详情。

请阅读RFC或查看Unicode and e-mail上的维基百科条目。

答案 1 :(得分:0)

我通过添加默认的'Content-Transfer-Encoding'=&gt;来解决我的问题我的ActionMailer中的'7bit'

查看API docs