Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #8954: add_filename_to_inline_mime_parts.diff

File add_filename_to_inline_mime_parts.diff, 6.4 kB (added by vjebelev, 1 year ago)
  • test/mail_service_test.rb

    old new  
    125125    part "text/html" do |p| 
    126126      p.charset = "iso-8859-1" 
    127127      p.body = "blah" 
     128      p.filename = "blah.html" 
    128129    end 
    129130 
    130131    attachment :content_type => "image/jpeg", :filename => "foo.jpg", 
     
    711712 
    712713    assert_equal "text/html", mail.parts[1].content_type 
    713714    assert_equal "iso-8859-1", mail.parts[1].sub_header("content-type", "charset") 
     715    assert_equal "blah.html", mail.parts[1].sub_header("content-type", "name") 
    714716    assert_equal "inline", mail.parts[1].content_disposition 
     717    assert_equal "blah.html", mail.parts[1].sub_header("content-disposition", "filename") 
    715718 
    716719    assert_equal "image/jpeg", mail.parts[2].content_type 
    717720    assert_equal "attachment", mail.parts[2].content_disposition 
     
    809812    assert_equal "01QuienTeDijat.Pitbull.mp3", attachment.original_filename 
    810813  end 
    811814 
     815  def test_decode_encoded_inline_filename 
     816    fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email14") 
     817    mail = TMail::Mail.parse(fixture) 
     818    attachment = mail.attachments.last 
     819    assert_equal "rails-logo.png", attachment.original_filename 
     820  end 
     821 
    812822  def test_wrong_mail_header 
    813823    fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email9") 
    814824    assert_raise(TMail::SyntaxError) { TMail::Mail.parse(fixture) } 
  • test/fixtures/raw_email14

    old new  
     1From: xxx <xxx@xxx.com> 
     2To: xxxx xxxxxx <xxx@xxxxx.com> 
     3Subject: inline part with filename 
     4Mime-Version: 1.0 
     5Content-Type: multipart/alternative; boundary=mimepart_46950d4a61967_6289..fdbea7be8337 
     6Message-Id: <20070711170306.642AFE58B4D@xxxx.xxxxx> 
     7Date: Wed, 11 Jul 2007 13:03:06 -0400 (EDT) 
     8 
     9 
     10--mimepart_46950d4a61967_6289..fdbea7be8337 
     11Content-Type: text/plain; charset=utf-8 
     12Content-Transfer-Encoding: Quoted-printable 
     13Content-Disposition: inline; charset=utf-8 
     14 
     15Hello text!= 
     16 
     17--mimepart_46950d4a61967_6289..fdbea7be8337 
     18Content-Type: multipart/mixed; boundary=mimepart_46950d4a61d96_6289..fdbea7be849b 
     19 
     20 
     21--mimepart_46950d4a61d96_6289..fdbea7be849b 
     22Content-Type: image/png; charset=utf-8 
     23Content-Transfer-Encoding: Base64 
     24Content-Disposition: inline; charset=utf-8; filename=rails-logo.png 
     25 
     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 
     59RK5CYII= 
     60 
     61--mimepart_46950d4a61d96_6289..fdbea7be849b 
     62Content-Type: text/html; charset=utf-8 
     63Content-Transfer-Encoding: Quoted-printable 
     64Content-Disposition: inline; charset=utf-8 
     65 
     66<html><body>inline image with filename provided</body></html>= 
     67 
     68--mimepart_46950d4a61d96_6289..fdbea7be849b-- 
     69 
     70--mimepart_46950d4a61967_6289..fdbea7be8337-- 
     71 
  • lib/action_mailer/part.rb

    old new  
    7070        end 
    7171 
    7272        # Always set the content_type after setting the body and or parts! 
    73         # Also don't set filename and name when there is none (like in 
    74         # non-attachment parts) 
     73        # Also don't set filename and name when there is none. 
    7574        if content_disposition == "attachment" 
    7675          ctype_attrs.delete "charset" 
    77           part.set_content_type(real_content_type, nil, 
    78             squish("name" => filename).merge(ctype_attrs)) 
    79           part.set_content_disposition(content_disposition, 
    80             squish("filename" => filename).merge(ctype_attrs)) 
    8176        else 
    8277          part.set_content_type(real_content_type, nil, ctype_attrs) 
    83           part.set_content_disposition(content_disposition)  
    8478        end         
     79        part.set_content_type(real_content_type, nil, 
     80          squish("name" => filename).merge(ctype_attrs)) 
     81        part.set_content_disposition(content_disposition, 
     82          squish("filename" => filename).merge(ctype_attrs)) 
    8583      else 
    8684        if String === body 
    8785          part = TMail::Mail.new