» IT tipps and howto's

How To: Delete specific mails from Mail Queue

Original Entry: 05.06.2008
Last Update: 05.03.2010 (see bottom)

I finally found a script, I was looking for forever! For a long time now I've been seeking for a script or a command which is able to delete only certain mails of the Mail Queue. And I finally found it today on this site: http://www.cyberciti.biz/tips/howto-postfix-flush-mail-queue.html

Here's a summary of what to do.
First of all, if you simply want to delete ALL the mails in your mailq, use the following simple command. Be sure to write ALL in capital letters.

postsuper -v -d ALL

Unfortunately there is no possibility to delete certain mails like to certain domains. For example: postsuper -d *.com << don't try that, it won't work (unfortunately). So what we need in this case, is a script, which searches through the mailq for a given domain and deletes only those mails.

This is the script which fulfils your dream, name it as you want, for example deletemail.pl:

#!/usr/bin/perl

my $REGEXP = shift(@ARGV) || die “no email-adress given (regexp-style, e.g. bl.*\@yahoo.com)!”;

my %Q;
my $queue_id;
my @data = `/usr/sbin/postqueue -p`;
foreach my $line (@data) {
if ($line =~ /^(\w+)(\*|\!)?\s/) {
$queue_id = $1;
}
if($queue_id) {
if ($line =~ /$REGEXP/i) {
$Q{$queue_id} = 1;
$queue_id = “”;
}
}
}

open(POSTSUPER,”|postsuper -d -”) || die “couldn’t open postsuper” ;
foreach my $key (keys %Q) {
print POSTSUPER “$key\n”;
}
close(POSTSUPER);

After you saved this file you can use the following command to delete mails from or to a certain domain (example host.com):

./deletemail.pl host.com

Updated 05.03.2010:

I got some difficulties with the script today - trying to use it on a SLES10 server. So I quickly wrote a oneliner in bash which does the same as this perlscript. Note that DOMAIN stands for the domain-name or the mail address you want to delete from the mailq. MONTH stands for the actual month in three letters (in this example Mar for March):

for i in $(mailq | grep DOMAIN | grep MONTH | awk '{ print $1 }') ; do postsuper -d $i; done

 

RSS feed

Blog Tags:

  AWS   Android   Ansible   Apache   Apple   Atlassian   BSD   Backup   Bash   Bluecoat   CMS   Chef   Cloud   Coding   Consul   Containers   CouchDB   DB   DNS   Database   Databases   Docker   ELK   Elasticsearch   Filebeat   FreeBSD   Galera   Git   GlusterFS   Grafana   Graphics   HAProxy   HTML   Hacks   Hardware   Icinga   Influx   Internet   Java   KVM   Kibana   Kodi   Kubernetes   LVM   LXC   Linux   Logstash   Mac   Macintosh   Mail   MariaDB   Minio   MongoDB   Monitoring   Multimedia   MySQL   NFS   Nagios   Network   Nginx   OSSEC   OTRS   Office   PGSQL   PHP   Perl   Personal   PostgreSQL   Postgres   PowerDNS   Proxmox   Proxy   Python   Rancher   Rant   Redis   Roundcube   SSL   Samba   Seafile   Security   Shell   SmartOS   Solaris   Surveillance   Systemd   TLS   Tomcat   Ubuntu   Unix   VMWare   VMware   Varnish   Virtualization   Windows   Wireless   Wordpress   Wyse   ZFS   Zoneminder