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