use File::Find;
use JSON;
+use PVE::Tools;
+
+use PMG::Utils;
+
my $spooldir = "/var/spool/postfix";
my $postfix_rec_get = sub {
elsif ($r eq "E") { last; }
}
- close($fh);
-
return $res;
};
my $line = <$fh>;
if (!$line || !($line =~ m/^\s+T\s+5\s+10\s+20\s+40\s+80\s+160\s+320\s+640\s+1280\s+1280\+$/)) {
- close (CMD);
die "ERROR: unable to parse qshape output: - $line";
}
while (($count++ < 10000) && (defined($line = <$fh>))) {
if ($line =~ m/^\s+(\S+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+)$/) {
my @d = split(/\s+/, $1);
- push @$res, {
+ push @$res, {
domain => $d[0],
total => $d[1],
- '5s' => $d[2],
- '10s' => $d[3],
- '20s' => $d[4],
- '40s' => $d[5],
- '80s' => $d[6],
- '160s' => $d[7],
- '320s' => $d[8],
- '640s' => $d[9],
- '1280s' => $d[10],
- '1280s+' => $d[11],
+ '5m' => $d[2],
+ '10m' => $d[3],
+ '20m' => $d[4],
+ '40m' => $d[5],
+ '80m' => $d[6],
+ '160m' => $d[7],
+ '320m' => $d[8],
+ '640m' => $d[9],
+ '1280m' => $d[10],
+ '1280m+' => $d[11],
};
}
}
- close($fh);
-
return $res;
}
sub mailq {
- my ($domain, $limit) = @_;
-
- $domain = lc($domain);
+ my ($queue, $filter, $start, $limit) = @_;
open(my $fh, '-|', '/usr/sbin/postqueue', '-j') || die "ERROR: unable to run postqueue - $!\n";
my $count = 0;
+
+ $start = 0 if !$start;
+ $limit = 50 if !$limit;
+
my $res = [];
my $line;
while (defined($line = <$fh>)) {
my $rec = decode_json($line);
my $recipients = $rec->{recipients};
+ next if $rec->{queue_name} ne $queue;
foreach my $entry (@$recipients) {
- my $address = lc($entry->{address});
- if ($address =~ m/\@$domain$/) {
+ if (!$filter || $entry->{address} =~ m/$filter/i ||
+ $rec->{sender} =~ m/$filter/i) {
+ next if $count++ < $start;
+ next if $limit-- <= 0;
+
my $data = {};
foreach my $k (qw(queue_name queue_id arrival_time message_size sender)) {
$data->{$k} = $rec->{$k};
}
- $data->{receiver} = $address;
+ $data->{receiver} = $entry->{address};
$data->{reason} = $entry->{delay_reason};
push @$res, $data;
- last if $limit && (++$count >= $limit);
}
}
}
- close (CMD);
+ return ($count, $res);
+}
+
+sub postcat {
+ my ($queue_id, $header, $body) = @_;
+
+ die "no option specified (select header or body or both)"
+ if !($header || $body);
+
+ my @opts = ();
+
+ push @opts, '-h' if $header;
+ push @opts, '-b' if $body;
+
+ push @opts, '-q', $queue_id;
+
+ open(my $fh, '-|', '/usr/sbin/postcat', @opts) || die "ERROR: unable to run postcat - $!\n";
+
+ my $res = '';
+ while (defined(my $line = <$fh>)) {
+ $res .= $line;
+ }
return $res;
}
+# flush all queuespostconf -d|grep enable_long_queue_ids
+sub flush_queues {
+ PVE::Tools::run_command(['/usr/sbin/postqueue', '-f']);
+}
+
+# flush a single mail
+sub flush_queued_mail {
+ my ($queue_id) = @_;
+
+ PVE::Tools::run_command(['/usr/sbin/postqueue', '-i', $queue_id]);
+}
+
+sub delete_queued_mail {
+ my ($queue, $queue_id) = @_;
+
+ PVE::Tools::run_command(['/usr/sbin/postsuper', '-d', $queue_id, $queue]);
+}
+
+sub delete_queue {
+ my ($queue) = @_;
+
+ my $cmd = ['/usr/sbin/postsuper', '-d', 'ALL'];
+ push @$cmd, $queue if defined($queue);
+
+ PVE::Tools::run_command($cmd);
+}
+
+sub discard_verify_cache {
+ unlink "/var/lib/postfix/verify_cache.db";
+
+ PMG::Utils::service_cmd('postfix', 'reload');
+}
+
1;