feat: first try on lmtp transfer

This commit is contained in:
Dominik Meyer 2025-02-07 12:25:57 +01:00
parent 9a7a1c3d31
commit 4fcf21991a
Signed by: byterazor
GPG Key ID: EABDA0FD5981BC97

View File

@ -3,7 +3,7 @@ use warnings;
use Qpsmtpd::Constants; use Qpsmtpd::Constants;
use Qpsmtpd::DSN; use Qpsmtpd::DSN;
use Net::LMTP;
sub register { sub register {
@ -12,8 +12,10 @@ sub register {
$self->{lmtp_rcpt_based} = $qp->config("lmtp_rcpt_based") || 0; $self->{lmtp_rcpt_based} = $qp->config("lmtp_rcpt_based") || 0;
$self->{lmtp_host} = $qp->config("lmtp_host"); $self->{lmtp_host} = $qp->config("lmtp_host");
$self->{lmtp_port} = $qp->config("lmtp_port") || 24; $self->{lmtp_port} = $qp->config("lmtp_port") || 24;
$self->{qp}= $qp;
$self->{enabled} = 1; $self->{enabled} = 1;
if (!$self->{lmtp_rcpt_based} && !$self->{lmtp_host}) { if (!$self->{lmtp_rcpt_based} && !$self->{lmtp_host}) {
$self->{enabled} = 0; $self->{enabled} = 0;
$self->log(LOGERROR, "No LMTP host configured, disabling plugin\n"); $self->log(LOGERROR, "No LMTP host configured, disabling plugin\n");
@ -24,7 +26,23 @@ sub register {
sub lmtp_transfer 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; return DECLINED;
} }
@ -61,5 +79,5 @@ sub hook_queue {
$self->log(LOGNOTICE,"forwarding mail to LMTP host: $lmtp_host:$lmtp_port\n"); $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);
} }