Add hardcoded mapping between postfix's cleanup errors and corresponding
Qpsmtpd::DSN value. (David Muir Sharnoff) git-svn-id: https://svn.perl.org/qpsmtpd/branches/0.3x@667 958fd67b-6ff1-0310-b445-bb7760255be9
This commit is contained in:
parent
da93a9ca3b
commit
bdf3f983a7
@ -86,6 +86,39 @@ sub hook_queue {
|
||||
|
||||
# $self->log(LOGDEBUG, "queue-flags=".$transaction->notes('postfix-queue-flags'));
|
||||
my ($status, $qid, $reason) = Qpsmtpd::Postfix->inject_mail($transaction);
|
||||
if ($status) {
|
||||
# this section needs to be kept in sync with the cleanup_stat_map
|
||||
# array found in Postfix source file src/global/cleanup_strerror.c
|
||||
# which in turn uses constants defined in src/global/cleanup_user.h
|
||||
if ($status & (1<<8)) {
|
||||
# CLEANUP_STAT_DEFER
|
||||
return(DENYSOFT, $reason || "service unavailable (#4.7.1)");
|
||||
} elsif ($status & (1<<7)) {
|
||||
# CLEANUP_STAT_PROXY
|
||||
return(DENYSOFT, $reason || "proxy reject (#4.3.0)");
|
||||
} elsif ($status & (1<<0)) {
|
||||
# CLEANUP_STAT_BAD
|
||||
return(DENYSOFT, $reason || "internal prototcal error (#4.3.0)");
|
||||
} elsif ($status & (1<<6)) {
|
||||
# CLEANUP_STAT_RCPT
|
||||
return Qpsmtpd::DSN->addr_unspecified(DENY, $reason || "no recipients specified");
|
||||
} elsif ($status & (1<<4)) {
|
||||
# CLEANUP_STAT_HOPS
|
||||
return Qpsmtpd::DSN->too_many_hops(DENY, $reason || "too many hops");
|
||||
} elsif ($status & (1<<2)) {
|
||||
# CLEANUP_STAT_SIZE
|
||||
return Qpsmtpd::DSN->sys_msg_too_big(DENY, $reason || "message file too big");
|
||||
} elsif ($status & (1<<3)) {
|
||||
# CLEANUP_STAT_CONT
|
||||
return Qpsmtpd::DSN->media_conv_prohibited(DENY, $reason || "message content rejected");
|
||||
} elsif ($status & (1<<1)) {
|
||||
# CLEANUP_STAT_WRITE
|
||||
return (DECLINED, $reason || "queue file write error");
|
||||
} else {
|
||||
# we have no idea why we're here.
|
||||
return (DECLINED, $reason || "unknown error from postfix/cleanup: $status");
|
||||
}
|
||||
}
|
||||
$status and return (DECLINED, "Unable to queue message ($status, $reason)");
|
||||
|
||||
my $msg_id = $transaction->header->get('Message-Id') || '';
|
||||
|
Loading…
Reference in New Issue
Block a user