On Tue, 25 Jul 2006, Magnus Holmgren wrote:

> Has anyone suggested doing callouts during routing? I'm thinking of a new 
> router that works similarly to the redirect router but uses SMTP calls 
> instead of lookups. 

... but you would have to do all the other routing first, in order to 
find out where to do the callout, so I'm not sure how this would fit in.

After some thought, my feeling now is that the simplest way of "bolting 
on" this functionality to the existing code is to do it all in the 
deliver.c module, at the end of a delivery process. The 551 would up 
till then be treated as a failure, and Exim would be about to create a 
bounce message.

At that point, it should be possible to notice that the failure was a 
551, and (optionally, of course) do something different. What should be 
done? The most convenient, I now think, would be to submit a new message 
to Exim for the redirected recipient, and mark the original recipient as 
"delivered". A new logging flag (like => and -> and *>) would have to be 
invented (possibly +>).

This works well because (a) you can add an X-Redirected-551: header line 
so that the information about what happened is preserved in the message
(as well as being logged), (b) looping is automatically handled by the
Received: header counting, and (c) there is no significant delay. The 
disadvantage is that the message passes through Exim twice.

The alternative would be to change the recipient and wait for the next 
queue run, but that does not give you (a), (b), or (c).

-- 
Philip Hazel            University of Cambridge Computing Service
Get the Exim 4 book:    http://www.uit.co.uk/exim-book

-- 
## List details at http://www.exim.org/mailman/listinfo/exim-dev Exim details 
at http://www.exim.org/ ##

Reply via email to