> Why does smtp-forward not adopt to the 550 from the internal mailserver?
I made a patch to address this problem in the "rcpt to" stage.
Multi-recipient mails with one failing recipient will be a problem here
I suppose.
Regards,
Bjoern
--- smtp-forward.ORIG 2008-11-07 23:51:55.227844437 +0100
+++ smtp-forward 2008-11-08 10:35:02.489966487 +0100
@@ -52,18 +52,34 @@
Timeout => 60,
Hello => $self->qp->config("me"),
) || die $!;
- $smtp->mail( $transaction->sender->address || "" ) or return(DECLINED,
"Unable to queue message ($!)");
+ $smtp->mail( $transaction->sender->address || "" ) or return(DECLINED,
"Unable to queue message:", mkmsg($smtp));
for ($transaction->recipients) {
- $smtp->to($_->address) or return(DECLINED, "Unable to queue message ($!)");
+ unless ($smtp->to($_->address)) {
+ if ($smtp->code =~ /^4/) { return(DECLINED, "Unable to queue message:",
mkmsg($smtp)); }
+ elsif ($smtp->code =~ /^5/) { return(DENY, "Fatal error, unable to
queue message:", mkmsg($smtp)); }
+ else { return(DECLINED, "Unable to queue message:", mkmsg($smtp)); }
+ }
}
- $smtp->data() or return(DECLINED, "Unable to queue message ($!)");
- $smtp->datasend($transaction->header->as_string) or return(DECLINED, "Unable
to queue message ($!)");
+ $smtp->data() or return(DECLINED, "Unable to queue message:", mkmsg($smtp));
+ $smtp->datasend($transaction->header->as_string) or return(DECLINED, "Unable
to queue message:", mkmsg($smtp));
$transaction->body_resetpos;
while (my $line = $transaction->body_getline) {
- $smtp->datasend($line) or return(DECLINED, "Unable to queue message ($!)");
+ $smtp->datasend($line) or return(DECLINED, "Unable to queue message:",
mkmsg($smtp));
}
- $smtp->dataend() or return(DECLINED, "Unable to queue message ($!)");
- $smtp->quit() or return(DECLINED, "Unable to queue message ($!)");
+ $smtp->dataend() or return(DECLINED, "Unable to queue message:",
mkmsg($smtp));
+ $smtp->quit() or return(DECLINED, "Unable to queue message:", mkmsg($smtp));
$self->log(LOGINFO, "finished queueing");
return (OK, "Queued!");
}
+
+sub mkmsg {
+ my ($smtp) = @_;
+ my $code = $smtp->code;
+ my @messages = split(/\n/, $smtp->message);
+ my @outmsg;
+ while (my $msg = shift @messages) {
+ my $line = $code . (@messages?"-":" ").$msg;
+ push @outmsg, $line;
+ }
+ return @outmsg;
+}