You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by no...@apache.org on 2009/09/06 20:09:09 UTC

svn commit: r811850 - /labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java

Author: norman
Date: Sun Sep  6 18:09:09 2009
New Revision: 811850

URL: http://svn.apache.org/viewvc?rev=811850&view=rev
Log:
Handle multipart/alternatives correctly

Modified:
    labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java

Modified: labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java?rev=811850&r1=811849&r2=811850&view=diff
==============================================================================
--- labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java (original)
+++ labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java Sun Sep  6 18:09:09 2009
@@ -150,47 +150,75 @@
 			sbPlain.append((String) con);
 
 		} else if (con instanceof Multipart) {
-			Multipart mp = (Multipart) con;
-
-			for (int i = 0; i < mp.getCount(); i++) {
-				Part part = mp.getBodyPart(i);
 
-				String contentType = part.getContentType().toLowerCase();
-				System.out.println("c: " + contentType);
+			Multipart mp = (Multipart) con;
+			String multipartContentType = mp.getContentType().toLowerCase();
+			System.out.println("mc: " + multipartContentType);
 
-				if (contentType.startsWith("text/plain")) {
-					isHTML = false;
-					sbPlain.append((String) part.getContent());
-				} else if (contentType.startsWith("text/html")) {
-					isHTML = true;
-					sbPlain.append((String) part.getContent());
-
-				} else if (contentType.startsWith("message/rfc822")) {
-					// Extract the message and pass it
-					MimeMessage msg = (MimeMessage) part.getDataHandler()
-							.getContent();
-					handleParts(msg, msg.getContent(), sbPlain, isHTML,
-							attachmentList);
-
-				} else {
-
-					if (part.getFileName() != null) {
-						MessageAttachment attachment = new MessageAttachment();
-						attachment.setName(MimeUtility.decodeText(part
-								.getFileName()));
-						attachment.setContentType(part.getContentType());
-						attachment.setSize(part.getSize());
+			if (multipartContentType.startsWith("multipart/alternative")) {
+				handleMultiPartAlternative(mp, sbPlain, isHTML);
+			} else {
+				for (int i = 0; i < mp.getCount(); i++) {
+					Part part = mp.getBodyPart(i);
+
+					String contentType = part.getContentType().toLowerCase();
+					System.out.println("c: " + contentType);
+
+					if (contentType.startsWith("text/plain")) {
+						isHTML = false;
+					} else if (contentType.startsWith("text/html")) {
+						isHTML = true;
+						sbPlain.append((String) part.getContent());
+
+					} else if (contentType.startsWith("message/rfc822")) {
+						// Extract the message and pass it
+						MimeMessage msg = (MimeMessage) part.getDataHandler()
+								.getContent();
+						handleParts(msg, msg.getContent(), sbPlain, isHTML,
+								attachmentList);
 
-						attachmentList.add(attachment);
 					} else {
-						handleParts(message, part, sbPlain, isHTML,
-								attachmentList);
+
+						if (part.getFileName() != null) {
+							MessageAttachment attachment = new MessageAttachment();
+							attachment.setName(MimeUtility.decodeText(part
+									.getFileName()));
+							attachment.setContentType(part.getContentType());
+							attachment.setSize(part.getSize());
+
+							attachmentList.add(attachment);
+						} else {
+							handleParts(message, part, sbPlain, isHTML,
+									attachmentList);
+						}
 					}
-				}
 
+				}
 			}
 
 		}
 	}
+	
+	private void handleMultiPartAlternative(Multipart mp,StringBuffer sbPlain, boolean isHTML) throws MessagingException, IOException {
+		String text = null;
+		for (int i = 0; i < mp.getCount(); i++) {
+			Part part = mp.getBodyPart(i);
+			
+			String contentType = part.getContentType().toLowerCase();
+			System.out.println("c: " + contentType);
+
+			if (contentType.startsWith("text/plain")) {
+				// we prefer plain text of html.. Does this make sense for a webmail client ?
+				isHTML = false;
+				text = (String) part.getContent();
+				break;
+
+			} else if (contentType.startsWith("text/html")) {
+				isHTML = true;
+				text = (String) part.getContent();
+			} 
+		}
+		sbPlain.append(text);
+	}
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org