Postfix: E-Mails zu einer bestimmten E-Mail Adresse aus der Mail-Queue anzeigen und löschen

2022-03-22 2022-03-23 16:18:12 postfix,E-Mail,Bash,DE

Folgendes Script zeigt Einträge in der Mail-Queue von Postfix zu einer angegebenen E-Mail Adresse. Es kann wahlweise nach Sender und Empfänger unterschieden werden. Wird der Parameter "del" mitgegeben, werden entsprechende Einträge aus der Mail-Queue gelöscht.

Usage

# zeigt alle Einträge in der Mail-Queue wo Sender = E-Mail Adresse
./mailqSelect.sh foo@example.com sender

# zeigt alle Einträge in der Mail-Queue wo Empfänger = E-Mail Adresse
./mailqSelect.sh foo@example.com recipient

# löscht alle Einträge in der Mail-Queue wo Sender = E-Mail Adresse
./mailqSelect.sh foo@example.com sender del

# löscht alle Einträge in der Mail-Queue wo Empfänger = E-Mail Adresse
./mailqSelect.sh foo@example.com recipient del

Script mailqSelect.sh

#!/bin/bash
#----------
# usage
# ./mailqSelect.sh foo@example.com sender
# ./mailqSelect.sh foo@example.com recipient
# ./mailqSelect.sh foo@example.com sender del
# ./mailqSelect.sh foo@example.com recipient del
# @see https://blog.ueffing.net/post/2022/03/22/postfix-e-mails-zu-einer-bestimmten-e-mail-adresse-aus-der-mail-queue-anzeigen-und-loeschen/

clear;
echo -e "\nInfo:\nadd 'del' as 3rd parameter if you want to delete matching entries.\n";
sEmailAddress=${1?' please add an email address as 1st parameter.'};
sType=${2?' please add type ("sender" | "recipient") as 2nd parameter.'};
sMode=$3;

echo -e "\nGiven:\nemail:\t$sEmailAddress\ntype:\t$sType\nmode:\t$sMode\n";

# sender
if [ "$sType" == "sender" ]
then
        aList=(`mailq | tail -n +2 | head -n -2 | grep -v '^ *(' | awk -v var=$sEmailAddress 'BEGIN { RS = "" } { if ($7 ~ var) print $1 }'  | tr -d '*!'`);

        for sId in "${aList[@]}"
        do
                echo "$sId";

                if [ "$sMode" == "del" ]
                then
                        echo "$sId" | postsuper -d;
                fi;
        done

# recipient
elif [ "$sType" == "recipient" ]
then
        aList=(`mailq | tail -n +2 | head -n -2 | grep -v '^ *(' | awk -v var=$sEmailAddress 'BEGIN { RS = "" } { if ($8 ~ var) print $1 }'  | tr -d '*!'`);

        for sId in "${aList[@]}"
        do
                echo "$sId";

                if [ "$sMode" == "del" ]
                then
                        echo "$sId" | postsuper -d;
                fi;
        done
fi;

Warnung: Benutzung und Anwendung selbstverständlich auf eigenes Risiko.


This website uses Cookies to provide you with the best possible service. Please see our Privacy Policy for more information. Click the check box below to accept cookies. Then confirm with a click on "Save".