Rails - 电子邮件主题在hotmail中是乱七八糟的

时间:2010-08-23 08:40:47

标签: ruby-on-rails email encoding hotmail

发送电子邮件适用于所有主要电子邮件客户端,除了hotmail(和其他一些),它显示为:

=?windows-1255?Q?Z33=30_=F9=22=E7=20=F2=E1=E5=F8_=F9=E5=E1=F8=20=E1=F9=E5=E5=E9=20=36=30_=F9=22=E7=20=EC=22=EE=F8=E2=E5=E6=E4=22=2C_=E1=E9=FA_=F7=F4=E4=20=E5=EE=E0=F4=E9=E9=E4_=EE=F9=F4=E7=FA=E9=FA=2C=20=E1=EE=FA=E7=ED=20=F9=E5=F7=20=E4=F4=F9=F4=

无论是否是utf8都无关紧要。似乎hotmail无法读取长引用的主题,因为对于较短的主题,它显示确定。

AFAIK例如gmail所做的就是将主题分成碎片,64(或其他)chars long ... 但我无法弄清楚如何在rails(2.3.8)中做到这一点。 Rails默认编码主题,引用形式,无法找到如何覆盖它,所以我可以自己拆分...

感谢。

2 个答案:

答案 0 :(得分:0)

如果你有一个非常长的主题行,那么你可能需要使用?=将它分成多行,如下所示:

Subject: =?iso-8859-1?Q?This_is_a_really_long_subject_that_should_need_so?=
 =?iso-8859-1?Q?me_encoding_to_make_sure_that_it_all_fits_correct?=
 =?iso-8859-1?Q?ly_=E7?=

我必须在主题行的末尾添加'ç'以获取苹果邮件引用它,但它应该给你的图片。我不记得你在拆分它之前应该多长时间我认为它在编码后是78但不是100%肯定,如果你看到的话,64将是安全的。

答案 1 :(得分:0)

这对我有用:

module ActionMailer
  module Quoting
    def quoted_printable(text, charset)
      require 'base64'
      #text.scan_utf8(/.{1,64}/m).map{|text| "=?#{charset}?B?#{Base64.b64encode(text)}?="}.join("\n")
      "=?#{charset}?B?#{Base64.b64encode(text).gsub(/\n/, '')}?="
    end
  end
end

module TMail
  class SubjectHeaderField < UnstructuredHeader
    def parse
      #Do nothing
    end
  end

  class HeaderField
    FNAME_TO_CLASS = FNAME_TO_CLASS.merge('subject' => SubjectHeaderField)
  end
end