Index: 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 --- RemoteDelivery.java 2 Oct 2002 07:27:44 -0000 1.29 +++ RemoteDelivery.java 3 Oct 2002 15:42:26 -0000 @@ -446,49 +446,68 @@ 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 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 ) { + 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) + .append("Sending mail to ") + .append(rec) + .append(" on host ") + .append(host); + log(logMessageBuffer.toString()); + } + mail.setRecipients(rec); + StringBuffer nameBuffer = + new StringBuffer(128) + .append(name) + .append("-to-") + .append(host); + mail.setName(nameBuffer.toString()); + outgoing.store(mail); + //Set it to try to deliver (in a separate thread) immediately (triggered by storage) + } + } + else { if (DEBUG) { StringBuffer logMessageBuffer = new StringBuffer(128) .append("Sending mail to ") - .append(rec) - .append(" on host ") - .append(host); + .append( mail.getRecipients() ) + .append(" via ") + .append( gatewayServer ); log(logMessageBuffer.toString()); } - mail.setRecipients(rec); - StringBuffer nameBuffer = - new StringBuffer(128) - .append(name) - .append("-to-") - .append(host); - mail.setName(nameBuffer.toString()); - outgoing.store(mail); - //Set it to try to deliver (in a separate thread) immediately (triggered by storage) + + // Store the mail unaltered for processing by the gateway server + outgoing.store( mail ); } - mail.setState(Mail.GHOST); + mail.setState(Mail.GHOST); } // Need to synchronize to get object monitor for notifyAll()