Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/MailCmdHandler.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/MailCmdHandler.java	(revision 390102)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/MailCmdHandler.java	(working copy)
@@ -17,9 +17,14 @@
 
 package org.apache.james.smtpserver;
 
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.james.util.mail.dsn.DSNStatus;
 import org.apache.mailet.MailAddress;
+
+import java.net.UnknownHostException;
 import java.util.Locale;
 import java.util.StringTokenizer;
 
@@ -28,7 +33,7 @@
   */
 public class MailCmdHandler
     extends AbstractLogEnabled
-    implements CommandHandler {
+    implements CommandHandler,Configurable {
 
     private final static String MAIL_OPTION_SIZE = "SIZE";
 
@@ -41,6 +46,18 @@
      */
     private final static String CURRENT_HELO_MODE = "CURRENT_HELO_MODE"; // HELO or EHLO
 
+    private boolean checkValidSenderDomain = false;
+    
+    /**
+     * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
+     */
+    public void configure(Configuration handlerConfiguration) throws ConfigurationException {
+        Configuration configuration = handlerConfiguration.getChild("checkValidSenderDomain",false);
+        if(configuration != null) {
+           checkValidSenderDomain = configuration.getValueAsBoolean();
+        }
+    }
+    
     /*
      * handles MAIL command
      *
@@ -61,8 +78,9 @@
     private void doMAIL(SMTPSession session, String argument) {
         String responseString = null;
         StringBuffer responseBuffer = session.getResponseBuffer();
-
         String sender = null;
+        boolean badSenderDomain = false;
+        
         if ((argument != null) && (argument.indexOf(":") > 0)) {
             int colonIndex = argument.indexOf(":");
             sender = argument.substring(colonIndex + 1);
@@ -140,9 +158,15 @@
             if (sender.length() == 0) {
                 //This is the <> case.  Let senderAddress == null
             } else {
-                if (sender.indexOf("@") < 0) {
-                    sender = sender + "@localhost";
-                }
+                
+                /**
+                 * The sender should always contain a domain if not it should not be accept.
+                 * So this should disabled.. or im wrong ?
+                 * 
+                 * if (sender.indexOf("@") < 0) {
+                 *   sender = sender + "@localhost";
+                 * }
+                 */
                 try {
                     senderAddress = new MailAddress(sender);
                 } catch (Exception pe) {
@@ -160,12 +184,28 @@
                     return;
                 }
             }
-            session.getState().put(SENDER, senderAddress);
-            responseBuffer.append("250 "+DSNStatus.getStatus(DSNStatus.SUCCESS,DSNStatus.ADDRESS_OTHER)+" Sender <")
-                          .append(sender)
-                          .append("> OK");
-            responseString = session.clearResponseBuffer();
-            session.writeResponse(responseString);
+            
+            if (checkValidSenderDomain == true) {
+                // try to resolv the provided domain in the senderaddress. If it can not resolved do not accept it.
+                try {
+                    org.apache.james.dnsserver.DNSServer.getByName(senderAddress.getHost());
+                } catch (UnknownHostException e) {
+                    badSenderDomain = true;
+                    responseString = "501 "+DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.ADDRESS_SYNTAX_SENDER)+ " sender " + senderAddress + " contains no valid domain";
+                    session.writeResponse(responseString);
+                    getLogger().info(responseString);
+                }
+                
+            }
+            
+            if (badSenderDomain == false) {
+                session.getState().put(SENDER, senderAddress);
+                responseBuffer.append("250 "+DSNStatus.getStatus(DSNStatus.SUCCESS,DSNStatus.ADDRESS_OTHER)+" Sender <")
+                              .append(sender)
+                              .append("> OK");
+                responseString = session.clearResponseBuffer();
+                session.writeResponse(responseString);
+            }
         }
     }
 
