Author: rdonkin Date: Mon Jul 7 13:23:15 2008 New Revision: 674620 URL: http://svn.apache.org/viewvc?rev=674620&view=rev Log: Added new recursion mode.
Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeEntity.java james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java james/mime4j/trunk/src/main/java/org/apache/james/mime4j/RecursionMode.java james/mime4j/trunk/src/test/java/org/apache/james/mime4j/ExampleMail.java Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeEntity.java URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeEntity.java?rev=674620&r1=674619&r2=674620&view=diff ============================================================================== --- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeEntity.java (original) +++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeEntity.java Mon Jul 7 13:23:15 2008 @@ -93,7 +93,9 @@ break; case EntityStates.T_END_HEADER: String mimeType = body.getMimeType(); - if (MimeUtil.isMultipart(mimeType)) { + if (recursionMode == RecursionMode.M_FLAT) { + state = EntityStates.T_BODY; + } else if (MimeUtil.isMultipart(mimeType)) { state = EntityStates.T_START_MULTIPART; clearMimeStream(); } else if (recursionMode != RecursionMode.M_NO_RECURSE Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java?rev=674620&r1=674619&r2=674620&view=diff ============================================================================== --- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java (original) +++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java Mon Jul 7 13:23:15 2008 @@ -156,6 +156,7 @@ currentStateMachine = rawentity; break; case M_NO_RECURSE: + case M_FLAT: // expected to be called only at start of paring case M_RECURSE: MimeEntity mimeentity = new MimeEntity( Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/RecursionMode.java URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/RecursionMode.java?rev=674620&r1=674619&r2=674620&view=diff ============================================================================== --- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/RecursionMode.java (original) +++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/RecursionMode.java Mon Jul 7 13:23:15 2008 @@ -39,5 +39,11 @@ * @see #getRecursionMode() */ public static final int M_RAW = 2; + /** + * Do not recurse <code>message/rfc822</code> parts + * and treat multiparts as a single flat body. + * @see #getRecursionMode() + */ + public static final int M_FLAT = 3; } Modified: james/mime4j/trunk/src/test/java/org/apache/james/mime4j/ExampleMail.java URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/ExampleMail.java?rev=674620&r1=674619&r2=674620&view=diff ============================================================================== --- james/mime4j/trunk/src/test/java/org/apache/james/mime4j/ExampleMail.java (original) +++ james/mime4j/trunk/src/test/java/org/apache/james/mime4j/ExampleMail.java Mon Jul 7 13:23:15 2008 @@ -23,12 +23,112 @@ public class ExampleMail { + public static final String MIME_MULTIPART_EMBEDDED_MESSAGES_INNER_MULTIPART_MIXED = "--4.66920160910299\r\n" + + "Content-Type: image/gif\r\n" + + "Content-Transfer-Encoding: base64\r\n" + + "MIME-Version: 1.0\r\n" + + "Content-ID: 238478934723847238947892374\r\n" + + "Content-Description: Bogus Image Data\r\n" + + "\r\n" + + "ABCDFEGHIJKLMNO\r\n" + + "\r\n" + + "--4.66920160910299\r\n" + + "Content-Type: message/rfc822\r\n" + + "\r\n" + + "From: Timothy Tayler <[EMAIL PROTECTED]>\r\n" + + "To: John Smith <[EMAIL PROTECTED]>\r\n" + + "Date: Sat, 16 Feb 2008 12:00:00 +0000 (GMT)\r\n" + + "Subject: Another Example Email\r\n" + + "Content-Type: multipart/mixed;boundary=2.50290787509\r\n" + + "\r\n" + + "Yet another preamble\r\n" + + "\r\n" + + "--2.50290787509\r\n" + + "Content-Type: text/plain\r\n" + + "\r\n" + + "Rhubard AND Custard!\r\n" + + "\r\n" + + "--2.50290787509\r\n" + + "Content-Type: multipart/alternative;boundary=3.243F6A8885A308D3\r\n" + + "\r\n" + + "--3.243F6A8885A308D3\r\n" + + "Content-Type: text/plain\r\n" + + "\r\n" + + "Rhubard?Custard?\r\n" + + "\r\n" + + "--3.243F6A8885A308D3\r\n" + + "\r\n" + + "Content-Type: text/richtext\r\n" + + "\r\n" + + "Rhubard?Custard?\r\n" + + "\r\n" + + "--3.243F6A8885A308D3--\r\n" + + "\r\n" + + "--2.50290787509--\r\n" + + "\r\n" + + "--4.66920160910299--"; + + public static final String MIME_MULTIPART_EMBEDDED_MESSAGES_INNER_MAIL = "From: Timothy Tayler <[EMAIL PROTECTED]>\r\n" + + "To: Samual Smith <[EMAIL PROTECTED]>\r\n" + + "Date: Thu, 14 Feb 2008 12:00:00 +0000 (GMT)\r\n" + + "Subject: A Multipart Alternative Email\r\n" + + "Content-Type: multipart/alternative;boundary=42\r\n" + + "\r\n" + + "This message has a premable\r\n" + + "\r\n" + + "--42\r\n" + + "Content-Type: text/plain; charset=US-ASCII\r\n" + + "\r\n" + + "Custard!\r\n" + + "\r\n" + + "--42\r\n" + + "Content-Type: application/octet-stream\r\n" + + "\r\n" + + "CUSTARDCUSTARDCUSTARD\r\n" + + "\r\n" + + "--42--\r\n"; + + public static final String MIME_MULTIPART_EMBEDDED_MESSAGES_BODY = "Start with a preamble\r\n" + + "\r\n" + + "--1729\r\n" + + "Content-Type: text/plain; charset=US-ASCII\r\n" + + "\r\n" + + "Rhubarb!\r\n" + + "\r\n" + + "--1729\r\n" + + "Content-Type: application/octet-stream\r\n" + + "Content-Transfer-Encoding: base64\r\n" + + "\r\n" + + "987654321AHPLA\r\n" + + "\r\n" + + "--1729\r\n" + + "Content-Type: message/rfc822\r\n" + + "\r\n" + + MIME_MULTIPART_EMBEDDED_MESSAGES_INNER_MAIL + + "\r\n" + + "--1729\r\n" + + "Content-Type: multipart/mixed; boundary=4.66920160910299\r\n" + + "\r\n" + + MIME_MULTIPART_EMBEDDED_MESSAGES_INNER_MULTIPART_MIXED + "\r\n" + + "--1729--\r\n" + + "\r\n"; + public static final String MD5_CONTENT = "Q2hlY2sgSW50ZWdyaXR5IQ=="; public static final String CONTENT_DESCRIPTION = "Blah blah blah"; public static final String CONTENT_ID = "<[EMAIL PROTECTED]>"; public static final Charset US_ASCII = Charset.forName("US-ASCII"); public static final Charset LATIN1 = Charset.forName("ISO-8859-1"); + public static final String MIME_MULTIPART_EMBEDDED_MESSAGES = + "From: Timothy Tayler <[EMAIL PROTECTED]>\r\n" + + "To: Samual Smith <[EMAIL PROTECTED]>\r\n" + + "Date: Thu, 14 Feb 2008 12:00:00 +0000 (GMT)\r\n" + + "Subject: A Multipart Email\r\n" + + "Content-Type: multipart/mixed;boundary=1729\r\n" + + "\r\n" + + MIME_MULTIPART_EMBEDDED_MESSAGES_BODY; + + public static final String MULTIPART_WITH_CONTENT_LOCATION = "From: Timothy Tayler <[EMAIL PROTECTED]>\r\n" + "To: Samual Smith <[EMAIL PROTECTED]>\r\n" + @@ -524,7 +624,8 @@ public static final byte[] ONE_PART_MIME_ASCII_COMMENT_IN_MIME_VERSION_BYTES = US_ASCII.encode(ONE_PART_MIME_ASCII_COMMENT_IN_MIME_VERSION).array(); public static final byte[] ONE_PART_MIME_ASCII_MIME_VERSION_SPANS_TWO_LINES_BYTES = US_ASCII.encode(ONE_PART_MIME_ASCII_MIME_VERSION_SPANS_TWO_LINES).array(); public static final byte[] MAIL_WITH_RFC822_PART_BYTES = ascii(MAIL_WITH_RFC822_PART); - + public static final byte[] MIME_MULTIPART_EMBEDDED_MESSAGES_BYTES = ascii(MIME_MULTIPART_EMBEDDED_MESSAGES); + public static final byte[] ascii(String text) { return US_ASCII.encode(text).array(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]