GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie führe ich ein Skript aus, wenn eine E-Mail auf dem Mailserver eintrifft? (Debian)

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.


Linux
  1. So führen Sie „find -exec {};?

  2. So führen Sie den Rsync-Prozess im Hintergrund aus

  3. Wie bringe ich meinen Golang-Webserver dazu, im Hintergrund zu laufen?

  4. Wie kann ich mein Node-JS-Skript automatisch mit dem Scheduler auf dem Server ausführen?

  5. Wie man E-Mails liest, die auf einem Debian-Server empfangen wurden

So führen Sie ein Python-Skript in PHP aus

So führen Sie ein Bash-Skript aus

So installieren Sie Nginx in Debian 7

So installieren Sie Apache unter Debian 7

So installieren Sie Apache unter Debian 8.2

So fügen Sie einem Debian-Server eine private IP hinzu