Index: src/java/org/apache/james/transport/mailets/RemoteDelivery.java
===================================================================
RCS file: /home/cvspublic/jakarta-james/src/java/org/apache/james/transport/mailets/RemoteDelivery.java,v
retrieving revision 1.29
diff -u -r1.29 RemoteDelivery.java
--- src/java/org/apache/james/transport/mailets/RemoteDelivery.java	2 Oct 2002 07:27:44 -0000	1.29
+++ src/java/org/apache/james/transport/mailets/RemoteDelivery.java	3 Oct 2002 17:50:01 -0000
@@ -60,7 +60,7 @@
     /**
      * Controls certain log messages
      */
-    private final boolean DEBUG = false;
+    private boolean DEBUG = false;
 
     private SpoolRepository outgoing; // The spool of outgoing mail
     private long delayTime = 21600000; // default is 6*60*60*1000 millis (6 hours)
@@ -77,6 +77,7 @@
      * Initialize the mailet
      */
     public void init() throws MessagingException {
+        DEBUG = (getInitParameter("debug") == null) ? false : new Boolean(getInitParameter("debug")).booleanValue();
         try {
             if (getInitParameter("delayTime") != null) {
                 delayTime = Long.parseLong(getInitParameter("delayTime"));
@@ -446,47 +447,65 @@
         if (DEBUG) {
             log("Remotely delivering mail " + mail.getName());
         }
-        Collection recipients = mail.getRecipients();
 
-        //Must first organize the recipients into distinct servers (name made case insensitive)
-        Hashtable targets = new Hashtable();
-        for (Iterator i = recipients.iterator(); i.hasNext();) {
-            MailAddress target = (MailAddress)i.next();
-            String targetServer = target.getHost().toLowerCase(Locale.US);
-            Collection temp = (Collection)targets.get(targetServer);
-            if (temp == null) {
-                temp = new Vector();
-                targets.put(targetServer, temp);
-            }
-            temp.add(target);
-        }
-
-        //We have the recipients organized into distinct servers... put them into the
-        //delivery store organized like this... this is ultra inefficient I think...
-
-        //store the new message containers, organized by server, in the outgoing mail repository
-        String name = mail.getName();
-        for (Iterator i = targets.keySet().iterator(); i.hasNext(); ) {
-            String host = (String) i.next();
-            Collection rec = (Collection) targets.get(host);
-            if (DEBUG) {
-                StringBuffer logMessageBuffer =
-                    new StringBuffer(128)
+        // If a gateway has been defined, don't split the message up based on recipient host,
+        // just forward the message as-is to the gateway.
+        if (gatewayServer == null) {
+            //Must first organize the recipients into distinct servers (name made case insensitive)
+            Collection recipients = mail.getRecipients();
+            Hashtable targets = new Hashtable();
+            for (Iterator i = recipients.iterator(); i.hasNext();) {
+                MailAddress target = (MailAddress)i.next();
+                String targetServer = target.getHost().toLowerCase(Locale.US);
+                Collection temp = (Collection)targets.get(targetServer);
+                if (temp == null) {
+                    temp = new Vector();
+                    targets.put(targetServer, temp);
+                }
+                temp.add(target);
+            }
+
+            //We have the recipients organized into distinct servers... put them into the
+            //delivery store organized like this... this is ultra inefficient I think...
+
+            //store the new message containers, organized by server, in the outgoing mail repository
+            String name = mail.getName();
+            for (Iterator i = targets.keySet().iterator(); i.hasNext(); ) {
+                String host = (String) i.next();
+                Collection rec = (Collection) targets.get(host);
+                if (DEBUG) {
+                    StringBuffer logMessageBuffer =
+                        new StringBuffer(128)
                             .append("Sending mail to ")
                             .append(rec)
                             .append(" on host ")
                             .append(host);
-                log(logMessageBuffer.toString());
-            }
-            mail.setRecipients(rec);
-            StringBuffer nameBuffer =
-                new StringBuffer(128)
+                    log(logMessageBuffer.toString());
+                }
+                mail.setRecipients(rec);
+                StringBuffer nameBuffer =
+                    new StringBuffer(128)
                         .append(name)
                         .append("-to-")
                         .append(host);
-            mail.setName(nameBuffer.toString());
-            outgoing.store(mail);
+                mail.setName(nameBuffer.toString());
+                //Set it to try to deliver (in a separate thread) immediately (triggered by storage)
+                outgoing.store(mail);
+            }
+        } else {
+            // Store the mail unaltered for processing by the gateway server
+            if (DEBUG) {
+                StringBuffer logMessageBuffer =
+                    new StringBuffer(128)
+                        .append("Sending mail to ")
+                        .append(mail.getRecipients())
+                        .append(" via ")
+                        .append(gatewayServer);
+                log(logMessageBuffer.toString());
+            }
+
             //Set it to try to deliver (in a separate thread) immediately (triggered by storage)
+            outgoing.store(mail);
         }
         mail.setState(Mail.GHOST);
     }

