QPSMTPD-MailserverInterface/queue/lmtp

75 lines
1.5 KiB
Plaintext
Raw Permalink Normal View History

2025-02-07 11:58:17 +01:00
use strict;
use warnings;
2025-02-07 15:57:46 +01:00
use Qpsmtpd::Constants;
use Qpsmtpd::DSN;
2025-02-07 12:25:57 +01:00
use Net::LMTP;
use Minion;
2025-02-07 11:58:17 +01:00
sub register {
my ($self, $qp) = (shift, shift);
# some default values
$self->{database} = $qp->config("queue_mysql_database") || "mail";
$self->{host} = $qp->config("queue_mysql_host") || "localhost";
$self->{port} = $qp->config("queue_mysql_port") || "3306";
$self->{user} = $qp->config("queue_mysql_user") || "qpsmtpd";
$self->{pass} = $qp->config("queue_mysql_password");
2025-02-07 11:58:17 +01:00
$self->createDSN();
2025-02-07 12:25:57 +01:00
}
sub createDSN()
{
my $self = shift;
my $dsn = "mysql://" . $self->{user} . ":" . $self->{pass} . "@" . $self->{host} . ":" . $self->{port} . "/" . $self->{database};
2025-02-07 11:58:17 +01:00
$self->{dsn} = $dsn;
2025-02-07 11:58:17 +01:00
}
sub hook_connect
2025-02-07 11:58:17 +01:00
{
my ($self, $transaction) = @_;
2025-02-07 15:46:07 +01:00
$self->{minion} = Minion->new(mysql => $self->{dsn});
2025-02-07 11:58:17 +01:00
}
2025-02-07 11:58:17 +01:00
sub hook_queue {
my ($self, $transaction) = @_;
my @notQueued;
2025-02-07 11:58:17 +01:00
my $queue = $transaction->notes("queue") || {};
2025-02-07 11:58:17 +01:00
for my $rcpt (keys %{$queue})
2025-02-07 11:58:17 +01:00
{
my $ret = $self->queue($transaction, $queue->{$rcpt});
if (!$ret)
{
push(@notQueued,$rcpt);
}
2025-02-07 11:58:17 +01:00
}
return OK;
}
sub queue
{
my ($self, $transaction, $rcpt) = @_;
2025-02-09 12:52:35 +01:00
my $data = {};
2025-02-09 13:51:48 +01:00
$data->{destination}=$rcpt;
$data->{header}=$transaction->header->as_string;
$data->{body}=$transaction->body_as_string;
2025-02-09 12:52:35 +01:00
$self->{minion}->enqueue(transmit => [$data] => {
attempts => 10,
expire => 60*60*24*2,
queue => $rcpt->{destination}
});
2025-02-07 11:58:17 +01:00
}