Tellier Benoit created JAMES-2896:
-------------------------------------

             Summary: RabbitMQ MailQueue should support delays
                 Key: JAMES-2896
                 URL: https://issues.apache.org/jira/browse/JAMES-2896
             Project: James Server
          Issue Type: Improvement
          Components: Queue, rabbitmq
            Reporter: Tellier Benoit


MX (mail exchange) servers do rely on delays for some things like spam and 
abuse detection thus this is a critical capability for a mail queue component 
of a server aiming at being used as an MX.

So far, RabbitMQ mail queue does not support delays. Its usage is then 
discouraged within an MX server (though it is perfectly suited for an MDA).

We can relatively easily implement delays within the RabbitMQ mail queue:

 - When a delay is specified, we save the message in the object storage,
 fire a message on a **MailQueueDelayExchange**, and persist it on the
MailQueueView.
 - Each James listens on a single Queue plugged to the
**MailQueueDelayExchange**.
 - For each incoming message, the receiver will position a timer until
the planned delivery (date).
 - Upon timer completion, we ack the message of MailQueueDelayExchange,
then we put the corresponding message in the mail RabbitMQMailQueue (no
need to update the mailQueueView nor store again the blob).
 - Upon connection loss, the message will be nacked and will be then
handled by another s/consumer/jamesServer/.

Obviously:
 - We need synchronized clocks "best-effort" - think NTP
 - This solution can duplicate emails upon connection loss - a local
James needs to invalidate the entries he is waiting for upon connection loss.
 - **flush** needs to be broadcasted so that all James servers can release the 
retained delayed emails into the mail queue.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to