75 lines
1.5 KiB
Plaintext
75 lines
1.5 KiB
Plaintext
use strict;
|
|
use warnings;
|
|
|
|
use Qpsmtpd::Constants;
|
|
use Qpsmtpd::DSN;
|
|
use Net::LMTP;
|
|
use Minion;
|
|
|
|
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");
|
|
|
|
$self->createDSN();
|
|
|
|
}
|
|
|
|
sub createDSN()
|
|
{
|
|
my $self = shift;
|
|
my $dsn = "mysql://" . $self->{user} . ":" . $self->{pass} . "@" . $self->{host} . ":" . $self->{port} . "/" . $self->{database};
|
|
|
|
$self->{dsn} = $dsn;
|
|
}
|
|
|
|
sub hook_connect
|
|
{
|
|
my ($self, $transaction) = @_;
|
|
|
|
$self->{minion} = Minion->new(mysql => $self->{dsn});
|
|
|
|
}
|
|
|
|
|
|
sub hook_queue {
|
|
my ($self, $transaction) = @_;
|
|
|
|
my @notQueued;
|
|
|
|
my $queue = $transaction->notes("queue") || {};
|
|
|
|
for my $rcpt (keys %{$queue})
|
|
{
|
|
my $ret = $self->queue($transaction, $queue->{$rcpt});
|
|
if (!$ret)
|
|
{
|
|
push(@notQueued,$rcpt);
|
|
}
|
|
}
|
|
|
|
return OK;
|
|
}
|
|
|
|
sub queue
|
|
{
|
|
my ($self, $transaction, $rcpt) = @_;
|
|
|
|
my $data = {};
|
|
$data->{destination}=$rcpt;
|
|
$data->{header}=$transaction->header->as_string;
|
|
$data->{body}=$transaction->body_as_string;
|
|
|
|
|
|
$self->{minion}->enqueue(transmit => [$data] => {
|
|
attempts => 10,
|
|
expire => 60*60*24*2,
|
|
queue => $rcpt->{destination}
|
|
});
|
|
|
|
} |