Anscheinend hat schon jemand anders darauf geantwortet, aber ich dachte, ich schreibe eine spezifische Antwort für Sie auf.
Ich würde procmail verwenden und ein ähnliches Rezept in Ihrer .procmailrc verwenden:
#turn this off when you're finished testing :)
VERBOSE=on
LOGFILE=/home/user/procmail.log
:0 c #the c means continue on after this recipe is parsed
| /path/to/your/script
Sie benötigen auch unten ein Standardrezept, um die Mail in Ihr Mailverzeichnis zu leiten.
Sie können /etc/aliases verwenden, um E-Mails direkt an ein zu verarbeitendes Programm weiterzuleiten. Wenn Sie also ein Skript ausführen möchten, um alle E-Mails an [email protected] zu verarbeiten, würden Sie diese Zeile in /etc/aliases einfügen (funktioniert für Postfix, sendmail usw.):
test: "|/usr/local/bin/processtestemail.php"
Führen Sie dann "newaliases" aus, um die Datenbank zu aktualisieren.
Stellen Sie dann sicher, dass Sie ein funktionierendes Programm in /usr/local/bin mit dem Namen processtestemail.php haben.
Es kann in PHP, Bash, Perl, Python geschrieben werden, was auch immer Sie wollen und was auch immer Sie für einen Interpeter haben. Sie könnten sogar eine kompilierte Binärdatei starten, die in c/c++ usw. geschrieben wurde.
Es gab oben Vorschläge zur Verwendung von procmail, es ist ein großartiges Produkt, aber ehrlich gesagt, was ich vorgestellt habe, ist die schnellste und einfachste Lösung und es funktioniert in mehr Versionen von *NIX mit mehr Mailern als alle anderen.
Außerdem sagt Ihnen keine der anderen Antworten wirklich, wie Sie die eingehende Nachricht verarbeiten sollen, und so würden Sie in Ihrem Skript die Eingabe von Standard "in" (stdin) lesen und diese Daten dann mit den Algorithmen analysieren, die Sie möglicherweise benötigen, um sie richtig zu verarbeiten als folgt:
<?php
$fd = fopen('php://stdin','r');
if ($fd) then
{
$email = ''; // initialize buffer
while (!feof ($fd)) // read as long as message
{
$rawemail .= fread($fd,1024); // read up to 1K at a time
ProcessTheMessageChunk($rawEmail);
}
fclose($fd); // done so close file handle
$fd=NULL; // clear file handle
}
else
{
print("ERROR: Could could open stdin...");
};
/*
** Now write your code to fill in the function ProcessMessageChunk()
** and then process the data you have collected altogether using
** that function/subroutine.
*/
?>
DankeSA Experts for Hire:wir machen alles groß oder kleintekops.com
Hier ist eine gute Anleitung zur Verarbeitung eingehender E-Mails. Am einfachsten ist es, den .forward
zu verwenden Mechanismus wie beschrieben, um eine Nachricht durch ein Skript zu leiten. Erstellen Sie eine .forward-Datei im Modus 600 im Home-Verzeichnis des Benutzers und fügen Sie darin eine Pipe zu einem Skript ein:
"|$HOME/bin/your.program -and some arguments"
Sie sollten sich jedoch stattdessen die Verwendung von procmail ansehen, da die Howto-Details. Procmail bietet Ihnen viele Vorteile, wie z. B. eine ausgefeiltere Protokollierung und E-Mail-Verarbeitung. Hier ist ein einfaches .procmailrc-Beispiel (wieder aus derselben Anleitung):
:0
* !^FROM_DAEMON
* !^FROM_MAILER
* !^X-Loop: [email protected]
| $HOME/bin/my.script
das einige nette Funktionen hat, wie die Fähigkeit, Mail-Loops zu erkennen und zu stoppen.