mail overhaul
[org.ibex.mail.git] / src / org / ibex / mail / Address.java
index 92bdbc8..ebf349b 100644 (file)
@@ -7,25 +7,26 @@ import java.util.*;
 import java.net.*;
 import java.io.*;
 
+// FIXME this should be more forgiving
 public class Address extends JSReflection {
     public final String user;
     public final String host;
     public final String description;
+    public static Address parse(String s) { try { return new Address(s); } catch (Malformed _) { return null; } }
     public Address(String user, String host, String description) {this.user=user;this.host=host;this.description=description;}
-    public Address(String s) throws Address.Malformed {
-        s = s.trim();
-        if (s.indexOf('<') != -1) {
+    public Address(String s0) throws Address.Malformed {
+        String s = s0.trim();
+        if (s.indexOf('<') == -1) description = "";
+        else {
             if (s.indexOf('>') == -1) { throw new Malformed("found open-angle-bracket (<) but not close-angle-bracket (>)"); }
             description = s.substring(0, s.indexOf('<')) + s.substring(s.indexOf('>') + 1);
             s = s.substring(s.indexOf('<') + 1, s.indexOf('>'));
-        } else {
-            description = "";
         }
-        if (s.indexOf('@') == -1) { throw new Malformed("no @-sign in email address"); }
+        if (s.indexOf('@') == -1) { throw new Malformed("no @-sign in email address \""+s0+"\""); }
         user = s.substring(0, s.indexOf('@'));
         host = s.substring(s.indexOf('@')+1);
     }
     public String coerceToString() { return toString(); }
     public String toString() { return description.equals("") ? (user +"@"+ host) : description+" <" + user +"@"+ host + ">"; }
-    public static class Malformed extends MailException.Malformed { public Malformed(String s) { super(s); } }
+    public static class Malformed extends RuntimeException { public Malformed(String s) { super(s); } }
 }