John Peacock writes:
As Matt suggested, it is almost certainly easier to write a queue plugin
than to embed that functionality in the core. An MTA, as a rule, should
never rewrite a message (other than appending new headers). On the other
hand, a queue plugin can act as a LDA (local deliver agent) and can
therefore do anything it wants to the message (which has basically been
accepted for delivery at that point).
Word trickery... esp. considering that many(?) use qpsmtpd as a proxy, and
for many the whole MTA/MDA-thingie is so blurred up that we can only talk
about them as different things mainly in spiritu or very "clean" setups.
Even since SpamAssassin became famous enough I've had to rewrite e-mail
bodies rewritten by some server which I don't control, and these bloody
locally(ish) created "this message was classified as spam/virus/whatever,
click here to read it anyways"-things which I rather get back into a real
e-mails before I pass them on to some other server.
I took a look at serializing delivery (i.e. handling each recipient
independently, which is what the OP was talking about doing) and it is
surprisingly tricky to do right in the core (since you cannot accept for
one rcpt and not the others). On the other hand, a queue plugin is pretty
simple, since you are handed an already complete message; queue/maildir is
an example (which doesn't actually serialize delivery).
Code technical reasons, well, that I can accept; even though I don't like
the idea of rewriting 10 huge e-mails instead of just one, it's doable (and
not that bad if done right).
/Tony