Odmazání mailu z mail fronty po určitém čase

Když rozesíláte velké newslettery, zůstávají Vám v mail frontě nedoručitelné maily. Například můžete narazit na zaplněnou schránku, případně může být mailserver dočasně nedostupný. Pokud má akce z  newsletteru časový limit, nemá smysl tyto maily po jeho uplynutí doručovat.

Mailserver postfix umí nastavit maximální dobu pro maily ve frontě, ale umí to jenom s granularitou dní. Promazávání fronty si proto musíte zajistit sami. Například timto skriptem:

#!/bin/bash

# setup mail queue time to live
DATE=$(date '+%s-600' | bc)

# iterate thru mail queue, delete mails older than DATE
# get only rows with mail id
mailq | grep '^[0-9A-Z]' | awk '{printf $1" "$3" "$4" "$5" "$6"\n"}' | \
        while read MSG_ID DOW M D T; do
                THIS=$(date -d "$DOW $M $D $T" '+%s')
                # delete mail older than DATE
                if (( DATE > THIS )) ; then
                        # uncomment to log deleted mail ids
                        #echo "postsuper -d $MSG_ID" >> /var/log/email_cleaner.log
                        /usr/sbin/postsuper -d $MSG_ID
                fi
        done

Dlouhodobě je výhodné si takto odmazané maily ukládat a vyhodnocovat jejich dostupnost. Pokud je schránka zaplněna trvale, nejspíše už není využívána a nemá smysl na ni newsletter posílat. Ulehčíte tím jak sobě (budete posílat méně mailů, jen na funkční email adresy), tak i cílovým mail serverům.

Komentování je uzavřeno.