mirror of
https://github.com/github/rails.git
synced 2026-01-26 06:48:59 -05:00
Preserve underscores when unquoting message bodies #1930
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2089 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
*SVN*
|
||||
|
||||
* Preserve underscores when unquoting message bodies #1930
|
||||
|
||||
* Encode multibyte characters correctly #1894
|
||||
|
||||
* Multipart messages specify a MIME-Version header automatically #2003 [John Long]
|
||||
|
||||
@@ -9,7 +9,7 @@ module TMail
|
||||
case (content_transfer_encoding || "7bit").downcase
|
||||
when "quoted-printable"
|
||||
Unquoter.unquote_quoted_printable_and_convert_to(quoted_body,
|
||||
to_charset, from_charset)
|
||||
to_charset, from_charset, true)
|
||||
when "base64"
|
||||
Unquoter.unquote_base64_and_convert_to(quoted_body, to_charset,
|
||||
from_charset)
|
||||
@@ -47,7 +47,7 @@ module TMail
|
||||
|
||||
class Unquoter
|
||||
class << self
|
||||
def unquote_and_convert_to(text, to_charset, from_charset = "iso-8859-1")
|
||||
def unquote_and_convert_to(text, to_charset, from_charset = "iso-8859-1", preserve_underscores=false)
|
||||
return "" if text.nil?
|
||||
if text =~ /^=\?(.*?)\?(.)\?(.*)\?=$/
|
||||
from_charset = $1
|
||||
@@ -55,7 +55,7 @@ module TMail
|
||||
text = $3
|
||||
case quoting_method.upcase
|
||||
when "Q" then
|
||||
unquote_quoted_printable_and_convert_to(text, to_charset, from_charset)
|
||||
unquote_quoted_printable_and_convert_to(text, to_charset, from_charset, preserve_underscores)
|
||||
when "B" then
|
||||
unquote_base64_and_convert_to(text, to_charset, from_charset)
|
||||
else
|
||||
@@ -66,8 +66,9 @@ module TMail
|
||||
end
|
||||
end
|
||||
|
||||
def unquote_quoted_printable_and_convert_to(text, to, from)
|
||||
convert_to(text.gsub(/_/," ").unpack("M*").first, to, from)
|
||||
def unquote_quoted_printable_and_convert_to(text, to, from, preserve_underscores=false)
|
||||
text = text.gsub(/_/, " ") unless preserve_underscores
|
||||
convert_to(text.unpack("M*").first, to, from)
|
||||
end
|
||||
|
||||
def unquote_base64_and_convert_to(text, to, from)
|
||||
|
||||
@@ -145,6 +145,11 @@ class TestMailer < ActionMailer::Base
|
||||
content_type "text/html"
|
||||
end
|
||||
|
||||
def html_mail_with_underscores(recipient)
|
||||
subject "html mail with underscores"
|
||||
body %{<a href="http://google.com" target="_blank">_Google</a>}
|
||||
end
|
||||
|
||||
def custom_template(recipient)
|
||||
recipients recipient
|
||||
subject "[Signed up] Welcome #{recipient}"
|
||||
@@ -631,6 +636,11 @@ EOF
|
||||
assert_equal "text/html", mail.content_type
|
||||
end
|
||||
|
||||
def test_html_mail_with_underscores
|
||||
mail = TestMailer.create_html_mail_with_underscores(@recipient)
|
||||
assert_equal %{<a href="http://google.com" target="_blank">_Google</a>}, mail.body
|
||||
end
|
||||
|
||||
def test_various_newlines
|
||||
mail = TestMailer.create_various_newlines(@recipient)
|
||||
assert_equal("line #1\nline #2\nline #3\nline #4\n\n" +
|
||||
|
||||
17
actionmailer/test/tmail_test.rb
Normal file
17
actionmailer/test/tmail_test.rb
Normal file
@@ -0,0 +1,17 @@
|
||||
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
||||
$:.unshift File.dirname(__FILE__) + "/fixtures/helpers"
|
||||
|
||||
require 'test/unit'
|
||||
require 'action_mailer'
|
||||
|
||||
class TMailMailTest < Test::Unit::TestCase
|
||||
def test_body
|
||||
m = TMail::Mail.new
|
||||
expected = 'something_with_underscores'
|
||||
m.encoding = 'quoted-printable'
|
||||
quoted_body = [expected].pack('*M')
|
||||
m.body = quoted_body
|
||||
assert_equal "something_with_underscores=\n", m.quoted_body
|
||||
assert_equal expected, m.body
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user