Author: Luzynski, Steve Date: To: exim-users Subject: RE: [Exim] How to distinguish between one and multiple recipients within an ACL statement?
Tim Jackson wrote on Thursday, February 05, 2004 12:05 PM:
>> Mabye with the hopes of header implementation being reworked in ACLs
>> in the future, it might be possible to have the DATA ACL phase
>> processed on a per recipient basis? Chances are I missed something
>> important here, so I'm hoping people correct me if I'm wrong :)
>
> You're missing something :) The fundamental problem is that SMTP only
> provides one opportunity to say yes/no to a message at the DATA
> stage, not one opportunity per recipient. This is a limitation of the
> protocol, not of Exim or Exiscan. So I very much doubt Exim will be
> changed to call the DATA stage multiple times, because it wouldn't
> make sense - however much the ACLs or Exiscan are changed, they can't
> get round the fact that at some point you have to give *one* response
> back via SMTP at the DATA stage. As was mentioned, the only real way
> round this is to accept only one recipient per session, or only
> recipients that match a particular set of DATA-time preferences.
And if you attempt to defer recipients beyond the first one to
accomplish this, you will find a LOT of broken MTAs out there that can't
handle a deferral.
The only other solution I've seen thus far is to set up dual MTAs.
Accept everything in the first one, and let the second MTA dequeue the
messages from the first MTA, one recipient at a time, to apply your
per-user preferences. Which then looses you the chance to do SMTP-time
rejections, meaning that any messages you need to reject will just
evaporate (since you cannot take the chance of actually generating a
bounce message).