Reject Log Auswertung für Benutzer

Daniel daniel at mail24.vip
Mi Mär 8 16:42:40 CET 2023


Moin Liste,

ich hatte über die Liste mal nach einem Skript gefragt zwecks auswerten was abgelehnt wurde vom Mailserver, egal ob
Blacklist/Greylist, Domain temp. nicht gefunden, SPF/DMARC usw.

Anbei Skript für euch überarbeitet in 2 Versionen, evt. hilft es ja dem einen oder anderen der ganze für sich, nen Team oder ggf.
für Kunden direkt auf Wunsch entsprechend mitteilen oder auswerten möchte.

Es gibt ja durchaus Versender die es nur 1x probieren und dann nicht wieder. So hätte man ggf. noch Chance den Versender zu
kontaktieren. Oder kann schauen ob da ne DNSBL austickt oder ähnliches.


Variante 1 als Textmail für nur bestimmten Benutzer, wenn alles gewünscht ist, das zweite grep entfernen.
===============
#!/bin/bash

# Definition der Variablen und Platzhalter
LOG_DATEI="/top/secret/maillog"
EMPFAENGER_EMAIL="empfanger at dummy.tld"
ABSENDER_EMAIL='"Ihr freundlicher Mailserver" <godmode at dummy.tld>'
BETREFF="Mailablehnungen von gestern"
DATUM=$(date -d yesterday '+%Y-%m-%d')
SENDMAIL_PFAD="/bin/sendmail"

# Verarbeitung der Mail-Log-Datei und senden der E-Mail
grep reject "$LOG_DATEI" | grep -i "BENUTZER@"| grep "$DATUM" 2>&1 | sed "1!b;s/^/To: $EMPFAENGER_EMAIL\nSubject: $BETREFF\nFrom:
$ABSENDER_EMAIL\n\n/" | $SENDMAIL_PFAD -t

===============
Oder auch als 1 Befehl wenn es ggf. besser ist z.B. im Cronjob

grep reject /var/log/maillog | grep -i BENUTZER@ | grep "$(date -d yesterday '+%b %_d')" 2>&1 | sed '1!b;s/^/To: empfanger at dummy.tld
\nSubject: Mailablehnungen von gestern\nFrom:"Mailserver Auswertung" <godmode at dummy.tld>\n\n/' | sendmail -t

===============

Variante 2 mit HTML Tabelle, ohne extra install von colum oder ähnlichem. Wenn man alles möchte dann    "BENUTZER"*   entfernen.
===============
#!/bin/bash

# Definition der Variablen und Platzhalter
LOG_DATEI="/top/secret/maillog"
EMPFAENGER_EMAIL="empfanger at dummy.tld"
ABSENDER_EMAIL='"Ihr freundlicher Mailserver" <godmode at dummy.tld>'
BETREFF="Mailablehnungen von gestern"
DATUM=$(date -d yesterday '+%Y-%m-%d')
SENDMAIL_PFAD="/bin/sendmail"

# Erstellen der HTML-Tabelle
TABLE="<table style=\"border-collapse: collapse;\">"
TABLE+="\n<tr><th>Uhrzeit</th><th>Grund</th><th>Von</th><th>An</th></tr>"
ODD_ROW=false
while read -r line
do
    if [[ $line == *"$DATUM"*"reject"*"BENUTZER"* && $line != *"DMARC policy:"* ]]; then
        if [ "$ODD_ROW" = true ]; then
            TABLE+="\n<tr style=\"background-color: #f2f2f2;\">"
            ODD_ROW=false
        else
            TABLE+="\n<tr>"
            ODD_ROW=true
        fi
        uhrzeit=$(echo $line | awk -F "T" '{print $2}' | awk -F "+" '{print $1}')
        grund=$(echo $line | awk -F "RCPT from" '{print $2}' | awk -F " from=" '{print $1}')
        von=$(echo $line | awk -F "from=<" '{print $2}' | awk -F ">" '{print $1}')
        an=$(echo $line | awk -F "to=<" '{print $2}' | awk -F ">" '{print $1}')
        TABLE+="<td style=\"border: 1px solid black; padding: 5px;\">$uhrzeit</td>"
        TABLE+="<td style=\"border: 1px solid black; padding: 5px;\">$grund</td>"
        TABLE+="<td style=\"border: 1px solid black; padding: 5px;\">$von</td>"
        TABLE+="<td style=\"border: 1px solid black; padding: 5px;\">$an</td>"
        TABLE+="</tr>"
    fi
done < "$LOG_DATEI"
TABLE+="</table>"

# Senden der E-Mail
echo -e "To: $EMPFAENGER_EMAIL\nSubject: $BETREFF\nFrom: $ABSENDER_EMAIL\nContent-Type: text/html\n\n$TABLE" | $SENDMAIL_PFAD -t

===============

Wer es auf die Spitze treiben möchte kann ganze auch statt per Mail ganze in ne mysql DB schieben und so ggf. Kunden es im
Webinterface anbieten.

Gruß Daniel
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : smime.p7s
Dateityp    : application/pkcs7-signature
Dateigröße  : 5984 bytes
Beschreibung: nicht verfügbar
URL         : <https://listi.jpberlin.de/pipermail/postfixbuch-users/attachments/20230308/6ca1def7/attachment.p7s>


Mehr Informationen über die Mailingliste Postfixbuch-users