Postfix: Übergeben Sie eine Kopie einer E-Mail an ein Skript, liefern Sie das Original jedoch an das Postfach

Postfix: Übergeben Sie eine Kopie einer E-Mail an ein Skript, liefern Sie das Original jedoch an das Postfach

Eigentlich ist es ganz einfach: Ich möchte alle eingehenden E-Mails an ein PHP-Skript übergeben, aber nur als Kopie, die Original-E-Mail soll weiterhin wie gewohnt im Postfach zugestellt werden.

Ich kriege es einfach nicht hin. Ich habe Folgendes versucht

(1)Einen Catchall-Alias ​​(mysql) erstellt:

@mydomain.tld   [email protected]

(2)Erstellt eine Regex-Transport-Zuordnung in /etc/postfix/mailpipe.cf (bedeutet im Wesentlichen: gilt für alle E-Mails von mydomain.tld)

/.*@mydomain\.tld/   mailpipe:

(3)alles in /etc/postfix/main.cf integriert:

transport_maps = ... regexp:/etc/postfix/mailpipe.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/....

(4)Der Transport wurde zu /etc/postfix/master.cf hinzugefügt:

mailpipe   unix  -       n       n       -       -       pipe
  flags=FR user=localuser argv=/path/to/my/script.php
  ${nexthop} ${user}

Das Skript:

#!/usr/bin/php -q
<?php
  $file = '/home/localuser/pipe/log.log';
  $input = file_get_contents('php://input');
  file_put_contents($file, $input, FILE_APPEND | LOCK_EX);

Das Setup scheint also zu funktionieren. Das Skript wird bei eingehenden E-Mails aufgerufen, aber das $inputist leer (funktioniert jedoch mit jeder anderen Zeichenfolge). Die E-Mail wird verarbeitet und dann entfernt/verworfen.Hier sind meine 2 Fragen:

  1. Wie kann ich vom Skript aus auf den Inhalt der E-Mail zugreifen?

  2. Wie kann ich verhindern, dass die E-Mail nach der Verarbeitung verworfen wird? Gibt es eine Möglichkeit, eine Kopie wie gewohnt in den Posteingang zu übergeben und eine weitere Kopie zur Verarbeitung an das Skript weiterzuleiten?

Antwort1

Dies lässt sich erreichen, indem Sie recipient_bcc_maps verwenden, um alle E-Mails per BCC an eine nur lokale Adresse zu senden, die für die Weiterleitung an Ihr Skript konfiguriert ist.

Fügen Sie die folgende Zeile zu /etc/postfix/recipient_bcc hinzu. Führen Sie „postmap /etc/postfix/recipient_bcc“ aus, nachdem die Bearbeitung abgeschlossen ist. Dadurch wird Postfix angewiesen, alle E-Mails, deren Domäne mit „@yourdomain.tld“ übereinstimmt, per BCC an die Adresse „robotscript@localhost“ zu senden.

@yourdomain.tld  robotscript@localhost

Fügen Sie die folgende Zeile zu /etc/postfix/transport hinzu. Führen Sie nach Abschluss der Bearbeitung „postmap /etc/postfix/transport“ aus. Dadurch wird Postfix mitgeteilt, dass E-Mails, die an die Adresse „robotscript@localhost“ gerichtet sind, direkt an diesen Server zugestellt und nicht an einen anderen Server weitergeleitet werden sollen.

robotscript@localhost :

Fügen Sie die folgenden Zeilen zu /etc/postfix/main.cf hinzu, damit Postfix die oben eingegebenen Konfigurationen verwendet.

recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
transport_maps = hash:/etc/postfix/transport

Stellen Sie sicher, dass der Parameter „mydestination“ in /etc/postfix/main.cf den Wert „localhost“ enthält.

Fügen Sie die folgende Zeile zu /etc/aliases hinzu. Führen Sie „postalias /etc/aliases“ aus, nachdem die Bearbeitung abgeschlossen ist. Dadurch werden E-Mails, die für „robotscript@localhost“ bestimmt sind, tatsächlich an Ihr PHP-Skript weitergeleitet. Ihr Skript sollte so eingerichtet sein, dass es den Inhalt der E-Mail von STDIN liest.

robotscript: "|/path/to/your/php_script.php"

Starten Sie Postfix neu. Alle Ihre E-Mails sollten dann in Ihr Skript kopiert und an die ursprüngliche Empfängeradresse zugestellt werden.

verwandte Informationen