From 2e7880f610fe822ac54cc312aff0997c578bc858 Mon Sep 17 00:00:00 2001 From: adam Date: Sat, 1 Mar 2008 06:01:42 +0000 Subject: [PATCH] use reverse DNS for EHLO/HELO darcs-hash:20080301060142-5007d-7e9ef457cfd8fda6222bd32f96b2eb2b1929229f.gz --- src/org/ibex/mail/SMTP.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/org/ibex/mail/SMTP.java b/src/org/ibex/mail/SMTP.java index cf86164..df480ac 100644 --- a/src/org/ibex/mail/SMTP.java +++ b/src/org/ibex/mail/SMTP.java @@ -199,7 +199,8 @@ public class SMTP { command = command.substring(10).trim(); from = command.equals("<>") ? null : new Address(command); conn.println("250 " + from + " is syntactically correct"); - // FEATURE: perform SMTP validation on the address, reject if invalid + // Don't perform SAV; discouraged here + // http://blog.fastmail.fm/2007/12/05/sending-email-servers-best-practice/ } else if (c.startsWith("RCPT TO:")) { // some clients are broken and put RCPT first; we will tolerate this command = command.substring(8).trim(); @@ -371,14 +372,23 @@ public class SMTP { Connection conn = null; try { conn = new Connection(new Socket(mx, 25), InetAddress.getLocalHost().getHostName()); + InetAddress localAddress = conn.getSocket().getLocalAddress(); + String reverse = DNSUtil.reverseLookup(localAddress); + Log.info(SMTP.Outgoing.class, + "outbound connection to " + mx + " uses " + localAddress + " [reverse: " + reverse + "]"); + InetAddress relookup = InetAddress.getByName(reverse); + if (!relookup.equals(localAddress)) + Log.error(SMTP.Outgoing.class, + "Warning: local machine fails forward-confirmed-reverse; " + + reverse + " resolves to " + localAddress); conn.setNewline("\r\n"); conn.setTimeout(60 * 1000); check(conn.readln(), conn); // banner try { - conn.println("EHLO " + conn.vhost); + conn.println("EHLO " + reverse); check(conn.readln(), conn); } catch (SMTPException smtpe) { - conn.println("HELO " + conn.vhost); + conn.println("HELO " + reverse); check(conn.readln(), conn); } String envelopeFrom = m.envelopeFrom==null ? "" : m.envelopeFrom.toString(); -- 1.7.10.4