To whom it may concern (and can commit :)), README.plugins documents, for the data_post hook:
DENY_DISCONNECT & DENYSOFT_DISCONNECT - as above but with disconnect But in Qpsmtpd/SMTP.pm, it doesn't handle the disconnect variants: sub data_post_respond { my ($self, $rc, $msg, $args) = @_; if ($rc == DONE) { return 1; } elsif ($rc == DENY) { $msg->[0] ||= "Message denied"; $self->respond(552, @$msg); } elsif ($rc == DENYSOFT) { $msg->[0] ||= "Message denied temporarily"; $self->respond(452, @$msg); } else { $self->queue($self->transaction); } # DATA is always the end of a "transaction" return $self->reset_transaction; } - Brad