At 17:43 +0100 on 09/03/2011, Tony Finch wrote about Re: Recipient is offline:
On 3 Sep 2011, at 02:54, "Robert A. Rosenberg" <hal9001(_at_)panix(_dot_)com>
For this to work, there would need to be a list maintained by the
delivering MTA that lists which other MTAs it has tried to deliver
to which failed due to failure to connect (along with a queue of
messages that need to be delivered to that MTA and a time to next
attempt to connect). When a new message arrives and it gets
delivered (since that connect attempt worked) then the queue of
pending messages can then be immediately flushed to the MTA. How
many MTAs have this type of support to force flush a pending queue
when a message delivery succeeds?
Exim works in roughly this way.
Upon rereading my flow, I noted a possible timing glitch since with
my method, the triggering message would end up arriving before those
that were in the queue and would released by the successful
triggering message delivery. A better method would be to place the
message at the end of the queue and read (but not remove) the first
(ie: Earliest) message on the queue and attempt to deliver it. If
successful then delete that message from the queue and flush the rest
to the receiving MTA. A failure to connect would just delete the copy
of the message (it is still at the top of the queue) and all will
remain until the next scheduled connection attempt (you might want to
restart the wait clock since an attempt was just done).
f.anthony.n.finch <dot(_at_)dotat(_dot_)at> http://dotat.at/