@@ -0,0 +1,2184 @@
+/****************************************************************%0A * Licensed to the Apache Software Foundation (ASF) under one   *%0A * or more contributor license agreements.  See the NOTICE file *%0A * distributed with this work for additional information        *%0A * regarding copyright ownership.  The ASF licenses this file   *%0A * to you under the Apache License, Version 2.0 (the            *%0A * %22License%22); you may not use this file except in compliance   *%0A * with the License.  You may obtain a copy of the License at   *%0A *                                                              *%0A *   http://www.apache.org/licenses/LICENSE-2.0                 *%0A *                                                              *%0A * Unless required by applicable law or agreed to in writing,   *%0A * software distributed under the License is distributed on an  *%0A * %22AS IS%22 BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *%0A * KIND, either express or implied.  See the License for the    *%0A * specific language governing permissions and limitations      *%0A * under the License.                                           *%0A ****************************************************************/%0A%0Apackage org.apache.james.transport.camel;%0A%0Aimport org.apache.camel.Header;%0A%0A/**%0A * Delayer which use a Header called NEXT_DELIVERY which contains a long value which represent the Date %0A * in milliseconds till which the processing of the next Processor should be delayed%0A * %0A *%0A */%0Apublic class MailDeliveryDelayer %7B%0A    %0A    /**%0A     * Header to use for storing the date till the processing should be delayed (in milliseconds)%0A     */%0A    public final static String NEXT_DELIVERY =%22NEXT_DELIVERY%22;%0A    %0A    %0A    /**%0A     * Return the time in milliseconds which should the execution of the next processor get delayed%0A     * %0A     * @param nextDelivery %0A     * @return millisToSleep%0A     */%0A    public long delay(@Header(NEXT_DELIVERY) long nextDelivery) %7B%0A        long sleepTime = nextDelivery - System.currentTimeMillis();%0A        %0A        // check if we should trigger the next processor now%0A        if (sleepTime %3C 0) %7B%0A            sleepTime = 0;%0A        %7D%0A        return sleepTime;%0A    %7D%0A%0A%7D%0A

Add delayer for computing the time to sleep before try to deliver the message again. See JAMES-977