fix horrible SMTP exception code bug
[org.ibex.mail.git] / src / org / ibex / mail / SMTP.java
index eed1a31..ba4069f 100644 (file)
@@ -327,7 +327,8 @@ public class SMTP {
         private static void check(String s, Connection conn) {
             if (s==null) return;
             while (s.length() > 3 && s.charAt(3) == '-') s = conn.readln();
-            if (s.startsWith("4")||s.startsWith("5")) throw new SMTPException(s);
+            //if (s.startsWith("4")||s.startsWith("5")) throw new SMTPException(s);
+            if (!s.startsWith("2")&&!s.startsWith("3")) throw new SMTPException(s);
         }
         private static boolean attempt(final Message m, final InetAddress mx) {
             boolean accepted = false;
@@ -344,18 +345,16 @@ public class SMTP {
                     conn.println("HELO " + conn.vhost);
                     check(conn.readln(), conn);
                 }
-                if (m.envelopeFrom==null) {
-                    Log.warn("", "MAIL FROM:<>");
-                    conn.println("MAIL FROM:<>");  check(conn.readln(), conn);
-                } else {
-                    Log.warn("", "MAIL FROM:<" + m.envelopeFrom.toString()+">");
-                    conn.println("MAIL FROM:<" + m.envelopeFrom.toString()+">");  check(conn.readln(), conn);
-                }
-                conn.println("RCPT TO:<"   + m.envelopeTo.toString()+">");      check(conn.readln(), conn);
-                conn.println("DATA");                          check(conn.readln(), conn);
-                Headers head = m.headers;
-                head = head.remove("return-path");
-                head = head.remove("bcc");
+                String envelopeFrom = m.envelopeFrom==null ? "" : m.envelopeFrom.toString();
+                conn.println("MAIL FROM:<" + envelopeFrom +">");            check(conn.readln(), conn);
+                conn.println("RCPT TO:<"   + m.envelopeTo.toString()+">");  check(conn.readln(), conn);
+                conn.println("DATA");                                       check(conn.readln(), conn);
+
+                Headers head = new Headers(m.headers,
+                                           new String[] {
+                                               "return-path", null,
+                                               "bcc", null
+                                           });
                 Stream stream = head.getStream();
                 for(String s = stream.readln(); s!=null; s=stream.readln()) {
                     if (s.startsWith(".")) conn.print(".");