diff options
author | Louise Crow <louise.crow@gmail.com> | 2013-06-25 13:48:54 -0700 |
---|---|---|
committer | Louise Crow <louise.crow@gmail.com> | 2013-06-25 13:48:54 -0700 |
commit | f19257e79383dacff878272d1dec3fd8644df715 (patch) | |
tree | 69f07f0ce4e7530b1ef53fe7334994aa2a7726ea /lib/mail_handler/backends | |
parent | c6e4e27566a38ac56f3c5a38f19714fc361f5ede (diff) |
Add test case and fix for unrecognized encoding in subject line
Diffstat (limited to 'lib/mail_handler/backends')
-rw-r--r-- | lib/mail_handler/backends/mail_extensions.rb | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/mail_handler/backends/mail_extensions.rb b/lib/mail_handler/backends/mail_extensions.rb index 6d6a20f8c..a5b6bc97e 100644 --- a/lib/mail_handler/backends/mail_extensions.rb +++ b/lib/mail_handler/backends/mail_extensions.rb @@ -117,6 +117,21 @@ module Mail end class Ruby19 + def Ruby19.b_value_decode(str) + match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m) + if match + encoding = match[1] + str = Ruby19.decode_base64(match[2]) + # Rescue an ArgumentError arising from an unknown encoding. + begin + str.force_encoding(fix_encoding(encoding)) + rescue ArgumentError + end + end + decoded = str.encode("utf-8", :invalid => :replace, :replace => "") + decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", :invalid => :replace, :replace => "").encode("utf-8") + end + def Ruby19.q_value_decode(str) match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m) if match |