You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2012/05/10 10:00:54 UTC

svn commit: r1336521 - in /james/hupa/trunk: client/src/main/java/org/apache/hupa/client/mvp/ server/src/main/java/org/apache/hupa/server/handler/ server/src/main/java/org/apache/hupa/server/utils/ server/src/test/java/org/apache/hupa/server/handler/ s...

Author: manolo
Date: Thu May 10 08:00:53 2012
New Revision: 1336521

URL: http://svn.apache.org/viewvc?rev=1336521&view=rev
Log:
Encode unstructures RFC 822 ^Caders when sending emails

Modified:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSendMessageHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/utils/MessageUtils.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/ContactsHandlerTest.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/FetchMessagesHandlerTest.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/utils/MessageUtilsTest.java

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java?rev=1336521&r1=1336520&r2=1336521&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java Thu May 10 08:00:53 2012
@@ -133,7 +133,8 @@ public class LoginView extends Composite
             if (event.getSource().equals(usernameTextBox)) {
                 passwordTextBox.setFocus(true);
             }  else if (event.getSource().equals(passwordTextBox)) {
-                formPanel.submit();
+                submitButton.click();
+//                formPanel.submit();
             }
         }
     }

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java?rev=1336521&r1=1336520&r2=1336521&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java Thu May 10 08:00:53 2012
@@ -19,9 +19,18 @@
 
 package org.apache.hupa.server.handler;
 
-import com.google.inject.Provider;
+import java.io.IOException;
+import java.util.ArrayList;
 
-import com.sun.mail.imap.IMAPStore;
+import javax.mail.Address;
+import javax.mail.FetchProfile;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Part;
+import javax.mail.UIDFolder;
+import javax.mail.internet.MimeMessage.RecipientType;
+import javax.servlet.http.HttpSession;
 
 import net.customware.gwt.dispatch.server.ExecutionContext;
 import net.customware.gwt.dispatch.shared.ActionException;
@@ -29,27 +38,16 @@ import net.customware.gwt.dispatch.share
 import org.apache.commons.logging.Log;
 import org.apache.hupa.server.IMAPStoreCache;
 import org.apache.hupa.server.preferences.UserPreferencesStorage;
+import org.apache.hupa.server.utils.MessageUtils;
 import org.apache.hupa.shared.data.IMAPFolder;
+import org.apache.hupa.shared.data.Message.IMAPFlag;
 import org.apache.hupa.shared.data.Tag;
 import org.apache.hupa.shared.data.User;
-import org.apache.hupa.shared.data.Message.IMAPFlag;
 import org.apache.hupa.shared.rpc.FetchMessages;
 import org.apache.hupa.shared.rpc.FetchMessagesResult;
 
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-
-import javax.mail.Address;
-import javax.mail.FetchProfile;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.Multipart;
-import javax.mail.Part;
-import javax.mail.UIDFolder;
-import javax.mail.internet.MimeUtility;
-import javax.mail.internet.MimeMessage.RecipientType;
-import javax.servlet.http.HttpSession;
+import com.google.inject.Provider;
+import com.sun.mail.imap.IMAPStore;
 
 public abstract class AbstractFetchMessagesHandler <A extends FetchMessages> extends AbstractSessionHandler<A, FetchMessagesResult>{
 
@@ -128,13 +126,13 @@ public abstract class AbstractFetchMessa
             Message m = messages[i];                
             String from = null;
             if (m.getFrom() != null && m.getFrom().length >0 ) {
-                from = decodeText(m.getFrom()[0].toString());
+                from = MessageUtils.decodeText(m.getFrom()[0].toString());
             }
             msg.setFrom(from);
 
             String replyto = null;
             if (m.getReplyTo() != null && m.getReplyTo().length >0 ) {
-                replyto = decodeText(m.getReplyTo()[0].toString());
+                replyto = MessageUtils.decodeText(m.getReplyTo()[0].toString());
             }
             msg.setReplyto(replyto);
             
@@ -143,7 +141,7 @@ public abstract class AbstractFetchMessa
             Address[] toArray = m.getRecipients(RecipientType.TO);
             if (toArray != null) {
                 for (Address addr : toArray) {
-                    String mailTo = decodeText(addr.toString());
+                    String mailTo = MessageUtils.decodeText(addr.toString());
                     to.add(mailTo);
                 }
             }
@@ -152,7 +150,7 @@ public abstract class AbstractFetchMessa
             // Check if a subject exist and if so decode it
             String subject = m.getSubject();
             if (subject != null) {
-                subject = decodeText(subject);
+                subject = MessageUtils.decodeText(subject);
             }
             msg.setSubject(subject);
             
@@ -161,7 +159,7 @@ public abstract class AbstractFetchMessa
             ArrayList<String> cc = new ArrayList<String>();
             if (ccArray != null) {
                 for (Address addr : ccArray) {
-                    String mailCc = decodeText(addr.toString());
+                    String mailCc = MessageUtils.decodeText(addr.toString());
                     cc.add(mailCc);
                 }            	
             }
@@ -247,20 +245,5 @@ public abstract class AbstractFetchMessa
         }
     }
 
-    /**
-     * Decode iso-xxxx strings present in subjects and emails like:
-     * 
-     * =?ISO-8859-1?Q?No=20hay=20ma=F1ana?= <he...@hupa.org> 
-     */
-    private String decodeText(String s) {
-    	String ret = s;
-    	try {
-    		ret = MimeUtility.decodeText(s);
-        } catch (UnsupportedEncodingException e) {
-            logger.debug("Unable to decode text " + s + " " + e.getMessage());
-        }
-        // Remove quotes around names in email addresses
-        ret =  ret.replaceFirst("^[\"' ]+([^\"]*)[\"' ]+<", "$1 <");
-        return ret;
-    }
+
 }

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSendMessageHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSendMessageHandler.java?rev=1336521&r1=1336520&r2=1336521&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSendMessageHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSendMessageHandler.java Thu May 10 08:00:53 2012
@@ -147,7 +147,7 @@ public abstract class AbstractSendMessag
         message.setRecipients(RecipientType.TO, MessageUtils.getRecipients(m.getTo()));
         message.setRecipients(RecipientType.CC, MessageUtils.getRecipients(m.getCc()));
         message.setRecipients(RecipientType.BCC, MessageUtils.getRecipients(m.getBcc()));
-        message.setSubject(m.getSubject());
+        message.setSubject(MessageUtils.encodeTexts(m.getSubject()));
         message.saveChanges();
         return message;
     }

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/utils/MessageUtils.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/utils/MessageUtils.java?rev=1336521&r1=1336520&r2=1336521&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/utils/MessageUtils.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/utils/MessageUtils.java Thu May 10 08:00:53 2012
@@ -20,9 +20,12 @@
 package org.apache.hupa.server.utils;
 
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import javax.activation.DataHandler;
 import javax.activation.DataSource;
@@ -71,7 +74,7 @@ public class MessageUtils {
         }
         Address[] array = new Address[recipients.size()];
         for (int i = 0; i < recipients.size(); i++) {
-            array[i] = new InternetAddress(recipients.get(i));
+            array[i] = new InternetAddress(encodeEmail(recipients.get(i)));
         }
         return array;
     }
@@ -176,4 +179,45 @@ public class MessageUtils {
         return messageBodyPart;
     }
     
+    /**
+     * Decode iso-xxxx strings present in subjects and emails like:
+     * 
+     * =?ISO-8859-1?Q?No=20hay=20ma=F1ana?= <he...@hupa.org> 
+     */
+    public static String decodeText(String s) {
+        String ret = s;
+        try {
+            ret = MimeUtility.decodeText(s);
+        } catch (UnsupportedEncodingException e) {
+            System.out.println(e.getMessage());
+        }
+        System.out.println(s + " " + ret);
+        ret =  ret
+          // Remove quotes around names in email addresses
+          .replaceFirst("^[<\"' ]+([^\"<>]*)[>\"' ]+<", "$1 <");
+        return ret;
+    }
+    
+    /**
+     * Encode non ascii characters present in emails like:
+     * 
+     * =?ISO-8859-1?Q?No=20hay=20ma=F1ana?= <he...@hupa.org> 
+     */
+    public static String encodeEmail(String s) {
+        Pattern p = Pattern.compile("^\\s*(.*?)\\s*(<[^>]+>)\\s*");
+        Matcher m = p.matcher(s);
+        return m.matches() ? encodeTexts(m.group(1)) + " " + m.group(2) : s;
+    }
+    
+    /**
+     * Encode non ascii characters present in email headers
+     */
+    public static String encodeTexts(String s) {
+        String ret = s;
+        try {
+            ret = MimeUtility.encodeText(s, "ISO-8859-1", null);
+        } catch (UnsupportedEncodingException e) {
+        }
+        return ret;
+    }
 }
\ No newline at end of file

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/ContactsHandlerTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/ContactsHandlerTest.java?rev=1336521&r1=1336520&r2=1336521&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/ContactsHandlerTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/ContactsHandlerTest.java Thu May 10 08:00:53 2012
@@ -40,6 +40,7 @@ public class ContactsHandlerTest extends
         userPreferences.addContact("<so...@foo.com>");
         userPreferences.addContact("somebody@foo.com");
         userPreferences.addContact("\"somebody@foo.com\" <so...@foo.com>");
+        userPreferences.addContact("<so...@foo.com> <so...@foo.com>");
         Assert.assertEquals(2, getContacts().length);
     }
     

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/FetchMessagesHandlerTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/FetchMessagesHandlerTest.java?rev=1336521&r1=1336520&r2=1336521&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/FetchMessagesHandlerTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/FetchMessagesHandlerTest.java Thu May 10 08:00:53 2012
@@ -44,7 +44,7 @@ public class FetchMessagesHandlerTest ex
         MimeMessage m1 = new MimeMessage(session, is);
         is = new ByteArrayInputStream("From: \"=?ISO-8859-1?Q?Manolo_Pe=F1a?=\" <pe...@foo.com>\nTo: b@foo.com\nSubject: something\n\ndata".getBytes());
         MimeMessage m2 = new MimeMessage(session, is);
-        is = new ByteArrayInputStream("From: a@foo.com\nTo: b@foo.com\nSubject: =?ISO-8859-1?Q?Monta=F1a?=\n\ndata".getBytes());
+        is = new ByteArrayInputStream("From: a@foo.com\nTo: \"<b...@foo.com>\" <b...@foo.com>\nSubject: =?ISO-8859-1?Q?Monta=F1a?=\n\ndata".getBytes());
         MimeMessage m3 = new MimeMessage(session, is);
         
         ArrayList<org.apache.hupa.shared.data.Message> msgs = fetchMessagesHandler.convert(2, f, new Message[]{m1, m2, m3});
@@ -61,6 +61,8 @@ public class FetchMessagesHandlerTest ex
         
         msgs = fetchMessagesHandler.convert(10, f, new Message[]{m3});
         assertEquals("Monta\u00F1a",  msgs.get(0).getSubject());
+        assertEquals("b@foo.com <b...@foo.com>",  msgs.get(0).getTo().get(0));
+
     }
 
     public void testFetchMessages() throws Exception {

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/utils/MessageUtilsTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/utils/MessageUtilsTest.java?rev=1336521&r1=1336520&r2=1336521&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/utils/MessageUtilsTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/utils/MessageUtilsTest.java Thu May 10 08:00:53 2012
@@ -22,6 +22,7 @@ import org.apache.hupa.server.HupaGuiceT
 
 import java.util.List;
 
+import javax.mail.Address;
 import javax.mail.BodyPart;
 import javax.mail.Message;
 
@@ -55,4 +56,13 @@ public class MessageUtilsTest extends Hu
         assertEquals(3, attachments.size());
         assertEquals(1, inlineImgs.size());
     }
+    
+    public void testGetRecipients () throws Exception  {
+        String encodedEmail = "=?ISO-8859-1?Q?Manolo=20Pe=F1a?= <he...@hupa.org>";
+        String decodedEmail = MessageUtils.decodeText(encodedEmail);
+        assertFalse(encodedEmail.equals(decodedEmail));
+        
+        Address[] addr = MessageUtils.getRecipients(encodedEmail, decodedEmail);
+        assertEquals(addr[0].toString(), addr[1].toString());
+    }
 }
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org