Permalink
Browse files

Handle parsing of recursively multipart messages

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1389 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 5add31e commit cf1e2a84fff32ab1cf2a736bb99c53e830d92db3 @jamis jamis committed Jun 6, 2005
@@ -1,5 +1,7 @@
*SVN*
+* Nested multipart message parts are correctly processed in TMail::Mail#body
+
* BCC headers are removed when sending via SMTP #1402
* Added 'content_type' accessor, to allow content type to be set on a per-message basis. content_type defaults to "text/plain".
@@ -28,9 +28,16 @@ def body(to_charset = 'utf-8', &block)
if multipart?
parts.collect { |part|
header = part["content-type"]
- header && header.main_type == "text" ?
- part.unquoted_body(to_charset) :
- (header ? attachment_presenter.call(header.params["name"]) : "")
+
+ if part.multipart?
+ part.body(to_charset, &attachment_presenter)
+ elsif header.nil?
+ ""
+ elsif header.main_type == "text"
+ part.unquoted_body(to_charset)
+ else
+ attachment_presenter.call(header["name"] || "(unnamed)")
+ end
}.join
else
unquoted_body(to_charset)
@@ -0,0 +1,56 @@
+Mime-Version: 1.0 (Apple Message framework v730)
+Content-Type: multipart/mixed; boundary=Apple-Mail-13-196941151
+Message-Id: <9169D984-4E0B-45EF-82D4-8F5E53AD7012@example.com>
+From: foo@example.com
+Subject: testing
+Date: Mon, 6 Jun 2005 22:21:22 +0200
+To: blah@example.com
+
+
+--Apple-Mail-13-196941151
+Content-Type: multipart/mixed;
+ boundary=Apple-Mail-12-196940926
+
+
+--Apple-Mail-12-196940926
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain;
+ charset=ISO-8859-1;
+ delsp=yes;
+ format=flowed
+
+This is the first part.
+
+--Apple-Mail-12-196940926
+Content-Transfer-Encoding: base64
+Content-Type: application/pdf;
+ x-unix-mode=0666;
+ name="test.pdf"
+Content-Disposition: inline;
+ filename=test.pdf
+
+YmxhaCBibGFoIGJsYWg=
+
+--Apple-Mail-12-196940926
+Content-Transfer-Encoding: 7bit
+Content-Type: text/plain;
+ charset=US-ASCII;
+ format=flowed
+
+
+
+--Apple-Mail-12-196940926--
+
+--Apple-Mail-13-196941151
+Content-Transfer-Encoding: base64
+Content-Type: application/pkcs7-signature;
+ name=smime.p7s
+Content-Disposition: attachment;
+ filename=smime.p7s
+
+jamisSqGSIb3DQEHAqCAMIjamisxCzAJBgUrDgMCGgUAMIAGCSqGSjamisEHAQAAoIIFSjCCBUYw
+ggQujamisQICBD++ukQwDQYJKojamisNAQEFBQAwMTELMAkGA1UEBhMCRjamisAKBgNVBAoTA1RE
+QzEUMBIGjamisxMLVERDIE9DRVMgQ0jamisNMDQwMjI5MTE1OTAxWhcNMDYwMjamisIyOTAxWjCB
+gDELMAkGA1UEjamisEsxKTAnBgNVBAoTIEjamisuIG9yZ2FuaXNhdG9yaXNrIHRpbjamisRuaW5=
+
+--Apple-Mail-13-196941151--
@@ -497,5 +497,11 @@ def test_headers_removed_on_smtp_delivery
assert_match %r{^To: #{@recipient}}, MockSMTP.deliveries[0][0]
assert_no_match %r{^Bcc: root@loudthinking.com}, MockSMTP.deliveries[0][0]
end
+
+ def test_recursive_multipart_processing
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email7")
+ mail = TMail::Mail.parse(fixture)
+ assert_equal "This is the first part.\n\nAttachment: test.pdf\n\n\nAttachment: smime.p7s\n", mail.body
+ end
end

0 comments on commit cf1e2a8

Please sign in to comment.