Here's another proposal based on my implementation experiences:
* Client initiates by sending MAIL with an extension.
* RCPT returns normal reply codes.
* DATA and the last BDAT return (in order):
- one reply code per recipient which got a 2yz reply.
- one end of mail reply code (as in the current ESMTP model,
which is the same as the "final" reply code in
This is the approach the causes the least changes to existing code
(at least in the MTAs that I maintain) and does not introduce complex
error handling. Maybe others can take a look at exim, postfix,