Ich habe ein Shellscript geschrieben, welches per Cron einmal am Tag die Postfix-Queue checkt und falls da was hängt, eine Email schickt.
Das Script sieht so aus:
#!/bin/bash
queuelength=/usr/sbin/postqueue -p | tail -n1 | awk '{print $5}'
queuecontent=/usr/sbin/postqueue -p
queuecount=echo $queuelength | grep "[0-9]"
if ["$queuecount" == „“]; then
echo „Queue is empty“;
else
echo -e „\r\n$queuecontent“ | mail -s „$queuelength Mails in der Queue“ „[email protected]“
fi
So weit so gut. Die Ausgabe sieht dann z.B. so aus:
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
9668D131469E 642 Mon Mar 30 12:40:25 [email protected]
(host mx00.kundenserver.de[212.227.15.41] refused to talk to me: 554-kundenserver.de (mxeue006) Nemesis ESMTP Service not available 554-No SMTP service 554 invalid DNS PTR resource record, IP=85.214.18.22)
[email protected]
8317713146A7 642 Mon Mar 30 12:40:35 [email protected]
(host mx00.kundenserver.de[212.227.15.41] refused to talk to me: 554-kundenserver.de (mxeue004) Nemesis ESMTP Service not available 554-No SMTP service 554 invalid DNS PTR resource record, IP=85.214.18.22)
[email protected]
EE45D13146A4 642 Mon Mar 30 12:40:30 [email protected]
(host mx01.kundenserver.de[217.72.192.67] refused to talk to me: 554-kundenserver.de (mxeue103) Nemesis ESMTP Service not available 554-No SMTP service 554 invalid DNS PTR resource record, IP=85.214.18.22)
[email protected]
49A6A13146A6 642 Mon Mar 30 12:40:33 [email protected]
(host mx01.kundenserver.de[217.72.192.67] refused to talk to me: 554-kundenserver.de (mxeue105) Nemesis ESMTP Service not available 554-No SMTP service 554 invalid DNS PTR resource record, IP=85.214.18.22)
[email protected]
– 3 Kbytes in 4 Requests.
Auch super!
Jetzt bräuchte ich aber noch den Betreff zu den einzelnen Mails. Den Inhalt der Mails kann man ja mit postcat -q XXXXXXXX auslesen und das bringt mich an die Grenzen meiner Shellscript-Fähigkeiten. Wie kann ich nun also:
- Die ID’s aus dem String $queuecontent auslesen, so dass quasi ein neuer String entsteht, der z.B. so aussieht:
9668D131469E
8317713146A7
EE45D13146A4
49A6A13146A6
- Alle IDs aus diesem neuen String mit postcat -q abarbeiten, dort den Betreff und die ersten 200 Zeichen den Inhalts unter der bisherigen Mail ausgeben. So dass die bisherige Mail wie bisher ausgegeben wird (siehe oben) und dann aber noch darunter die Betreffzeile und die ersten 200 Zeichen dieser 4 Emails nacheinander angezeigt wird.
Mit postcat -q sieht die Ausgabe z.B. so aus:
ENVELOPE RECORDS deferred/A/A7A8B13146C7
message_size: 1074 195 1 0 1074
message_arrival_time: Wed Apr 1 06:18:33 2015
create_time: Wed Apr 1 06:18:33 2015
named_attribute: rewrite_context=local
sender_fullname: www-data
sender: [email protected]
MESSAGE CONTENTS deferred/A/A7A8B13146C7
Received: by xxxxxx.stratoserver.net (Postfix, from userid 33)
id A7A8B13146C7; Wed, 1 Apr 2015 06:18:33 +0200 (CEST)
To: [email protected]
Subject: Freischaltung Ihrer Bewertung
X-PHP-Originating-Script: 10004:bewertung.php
From: [email protected]
X-PPP-Message-ID: <[email protected]>
X-PPP-Vhost: mail.de
Message-Id: <[email protected]>
Date: Wed, 1 Apr 2015 06:18:33 +0200 (CEST)
Hallo Marc,
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Alles Liebe,
Dirk.
HEADER EXTRACTED deferred/A/A7A8B13146C7
original_recipient: [email protected]
recipient: [email protected]
MESSAGE FILE END deferred/A/A7A8B13146C7
Falls mir jemand dazu was schreiben kann, wäre das toll. Ich weiß, dass dies recht leicht mit awk, tail und grep zu realisieren ist, habe davon aber SEHR wenig Plan
Gruß,
Dirk.