Address from = null;
Vector to = new Vector();
for(String command = conn.readln(); ; command = conn.readln()) try {
+ if (command == null) return;
String c = command.toUpperCase();
if (c.startsWith("HELO")) { conn.println("250 HELO " + conn.vhost); from = null; to = new Vector();
} else if (c.startsWith("EHLO")) { conn.println("250"); from = null; to = new Vector();
return false;
}
- private static void check(String s) { if (s.startsWith("4")||s.startsWith("5")) throw new MailException(s); }
+ private static void check(String s, Connection conn) {
+ while (s.charAt(3) == '-') s = conn.readln();
+ if (s.startsWith("4")||s.startsWith("5")) throw new MailException(s);
+ }
private static boolean attempt(final Message m, final InetAddress mx) {
boolean accepted = false;
Connection conn = null;
conn = new Connection(new Socket(mx, 25), InetAddress.getLocalHost().getHostName());
conn.setTimeout(60 * 1000);
Log.info(SMTP.Outgoing.class, "connected");
- check(conn.readln()); // banner
- conn.println("HELO " + conn.vhost); check(conn.readln());
- conn.println("MAIL FROM: " + m.envelopeFrom.user + "@" + m.envelopeFrom.host); check(conn.readln());
- conn.println("RCPT TO: " + m.envelopeTo.user + "@" + m.envelopeTo.host); check(conn.readln());
- conn.println("DATA"); check(conn.readln());
+ check(conn.readln(), conn); // banner
+ conn.println("HELO " + conn.vhost); check(conn.readln(), conn);
+ conn.println("MAIL FROM:<" + m.envelopeFrom.user + "@" + m.envelopeFrom.host+">"); check(conn.readln(), conn);
+ conn.println("RCPT TO:<" + m.envelopeTo.user + "@" + m.envelopeTo.host+">"); check(conn.readln(), conn);
+ conn.println("DATA"); check(conn.readln(), conn);
conn.println(m.toString());
conn.println(".");
- check(conn.readln());
+ check(conn.readln(), conn);
Log.info(SMTP.Outgoing.class, "success: message accepted by " + mx);
accepted = true;
conn.close();