]> source.dussan.org Git - redmine.git/commitdiff
MailHandler: fixed that sender's fullname is not unquoted (#10334).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 1 Mar 2012 15:32:34 +0000 (15:32 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 1 Mar 2012 15:32:34 +0000 (15:32 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9043 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/mail_handler.rb
test/fixtures/mail_handler/fullname_of_sender_as_utf8_encoded.eml [new file with mode: 0644]
test/unit/mail_handler_test.rb

index 8e8d6568f284e97f8719a7cc0ca1d8f31056ceae..9c96651837b32a87bd20e3b29b46629070cacbc1 100644 (file)
@@ -384,7 +384,7 @@ class MailHandler < ActionMailer::Base
   def create_user_from_email
     addr = email.from_addrs.to_a.first
     if addr && !addr.spec.blank?
-      user = self.class.new_user_from_attributes(addr.spec, addr.name)
+      user = self.class.new_user_from_attributes(addr.spec, TMail::Unquoter.unquote_and_convert_to(addr.name, 'utf-8'))
       if user.save
         user
       else
diff --git a/test/fixtures/mail_handler/fullname_of_sender_as_utf8_encoded.eml b/test/fixtures/mail_handler/fullname_of_sender_as_utf8_encoded.eml
new file mode 100644 (file)
index 0000000..ac14b44
--- /dev/null
@@ -0,0 +1,5 @@
+From: =?utf-8?b?w4TDpCDDlsO2?= <foo@example.org>
+Subject: foo
+Content-Type: text/plain; charset=utf-8
+
+testing user creation with quoted From-header
index 92dc43113cc22091aa1168dee147205647747166..218625f74de1f544127d96954b08316ddb5a6d23 100644 (file)
@@ -576,6 +576,21 @@ class MailHandlerTest < ActiveSupport::TestCase
     assert_equal 'foo+bar@example.net', user.mail
   end
 
+  def test_new_user_with_utf8_encoded_fullname_should_be_decoded
+    assert_difference 'User.count' do
+      issue = submit_email(
+                'fullname_of_sender_as_utf8_encoded.eml',
+                :issue => {:project => 'ecookbook'},
+                :unknown_user => 'create'
+              )
+    end
+
+    user = User.first(:order => 'id DESC')
+    assert_equal "foo@example.org", user.mail
+    assert_equal "Ää", user.firstname
+    assert_equal "Öö", user.lastname
+  end
+
   private
 
   def submit_email(filename, options={})