Thoughts on the following changes to smtp-forward? These diffs were taken
against the svn smtp-forward checked out yesterday.

Thanks.
--- smtp-forward	2010-09-13 17:16:07.516676585 -0400
+++ /tmp/smtp-forward	2010-09-14 13:40:37.436676584 -0400
@@ -20,6 +20,13 @@
 =cut
 
 use Net::SMTP;
+use Net::Cmd;
+
+sub trap {
+  my ($smtp) = @_;
+
+  $smtp->code =~ /5[0-9][0-9]/ ? return(DENY, $smtp->message) : return(DENYSOFT, $smtp->message);
+}
 
 sub init {
   my ($self, $qp, @args) = @_;
@@ -52,18 +59,18 @@
                             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( trap($smtp) );
   for ($transaction->recipients) {
-    $smtp->to($_->address) or return(DECLINED, "Unable to queue message ($!)");
+    $smtp->to($_->address) or return( trap($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( trap($smtp) );
+  $smtp->datasend($transaction->header->as_string) or return( trap($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( trap($smtp) );
   }
-  $smtp->dataend() or return(DECLINED, "Unable to queue message ($!)");
-  $smtp->quit() or return(DECLINED, "Unable to queue message ($!)");
+  $smtp->dataend() or return( trap($smtp) );
+  $smtp->quit() or return( trap($smtp) );
   $self->log(LOGINFO, "finished queueing");
   return (OK, "Queued!");
 }

Reply via email to