diff --git a/queue/lmtp b/queue/lmtp index f446622..cdf6ffc 100644 --- a/queue/lmtp +++ b/queue/lmtp @@ -3,7 +3,7 @@ use warnings; use Qpsmtpd::Constants; use Qpsmtpd::DSN; - +use Net::LMTP; sub register { @@ -12,8 +12,10 @@ sub register { $self->{lmtp_rcpt_based} = $qp->config("lmtp_rcpt_based") || 0; $self->{lmtp_host} = $qp->config("lmtp_host"); $self->{lmtp_port} = $qp->config("lmtp_port") || 24; + $self->{qp}= $qp; $self->{enabled} = 1; + if (!$self->{lmtp_rcpt_based} && !$self->{lmtp_host}) { $self->{enabled} = 0; $self->log(LOGERROR, "No LMTP host configured, disabling plugin\n"); @@ -24,7 +26,23 @@ sub register { sub lmtp_transfer { - my ($self, $transaction) = @_; + my ($self, $transaction, $lmtp_host, $lmtp_port, $lmtp_user) = @_; + + my $lmtp = Net::LMTP->new($lmtp_host, $lmtp_port); + $lmtp->hellp($self->{qp}->config("me")); + $lmtp->mail($transaction->sender->address); + $lmtp->recipient($lmtp_user); + $lmtp->data(); + $lmtp->datasend($transaction->header->as_string); + $transaction->body_resetpos; + while (my $line = $transaction->body_getline) { + $lmtp->datasend($line) + or return DECLINED, "Unable to queue message ($!)"; + } + $lmtp->dataend(); + $lmtp->quit(); + $self->log(LOGINFO, "finished queueing"); + return OK; return DECLINED; } @@ -61,5 +79,5 @@ sub hook_queue { $self->log(LOGNOTICE,"forwarding mail to LMTP host: $lmtp_host:$lmtp_port\n"); - return $self->lmtp_transfer($transaction); + return $self->lmtp_transfer($transaction, $lmtp_host, $lmtp_port, $lmtp_user); } \ No newline at end of file