10 Stimmen

Ich möchte, dass procmail ein benutzerdefiniertes Python-Skript ausführt, jedes Mal wenn eine neue Mail auftaucht

Ich habe eine ziemlich übliche Anforderung mit procmail, aber ich bin nicht in der Lage, die Ergebnisse irgendwie zu erhalten. Ich habe procmailrc Datei mit diesem Inhalt:

:0
* ^To.*@myhost
| /usr/bin/python /work/scripts/privilege_emails_forward.py

In meinem benutzerdefinierten Python-Skript (privilege_emails_forward.py) werden die aktuell empfangenen E-Mails gescannt und einige Operationen mit dem E-Mail-Inhalt durchgeführt. Aber ich bin nicht in der Lage, das Skript auf Anhieb auszuführen (geschweige denn den E-Mail-Inhalt zu durchsuchen).

  • Ist dies ein korrekter Weg, um ein externes Programm (Python) aufzurufen, sobald eine neue E-Mail eintrifft?
  • Und wie erhält mein Python-Programm (privilege_emails_forward.py) die E-Mail als Eingabe? Ich meine als sys.argv oder stdin????

0 Stimmen

Obwohl procmail kann funktionieren, da procmail wird seit 2001 nicht mehr aktiv entwickelt, und der Entwickler hat die Menschen ermutigt, andere Lösungen zu finden Gibt es Alternativen, die ebenfalls ein Skript beim Empfang einer neuen Nachricht ausführen?

11voto

Johannes Weiss Punkte 49967

Das ist völlig in Ordnung, setzen Sie einfach fw après :0 ( :0 fw ). Ihr Python-Programm empfängt die E-Mail am stdin . Sie müssen die möglicherweise umgewandelte Mail auf stdout .

fw bedeutet:

  • f Betrachten Sie das Rohr als einen Filter.
  • w Warten Sie, bis der Filter oder das Programm beendet ist, und prüfen Sie den Exitcode (der normalerweise ignoriert wird); wenn der Filter nicht erfolgreich war, wurde der Text nicht gefiltert.

Mein SPAM-Checker (bogofilter) funktioniert einfach so. Er fügt Kopfzeilen hinzu und spätere procmail-Regeln tun etwas in Abhängigkeit von diesen Kopfzeilen.

0 Stimmen

Das habe ich auch versucht. Aber es funktioniert immer noch nicht, ich weiß nicht warum :( Hier ist mein procmailrc-Skript: :0 fw * ^To.*@myhost | /usr/bin/python /work/scripts/privilege_emails_forward.py

0 Stimmen

Versuchen Sie VERBOSE=yes und werfen Sie einen Blick in Ihre procmail-Logdatei. Vielleicht können Sie den Fehler erkennen!

0 Stimmen

Johannes! Da dieses Kommentarfeld nicht ausreicht, um die Ausgabe des procmail-Logs zu drucken, habe ich die Ausgabe als ANTWORT angegeben. Bitte schauen Sie sich diese an.

5voto

paprika Punkte 2333

El Protokollauszug besagt eindeutig, dass Ihr Skript ausgeführt wird, auch wenn es nicht den gewünschten Effekt zeigt. Ich würde erwarten, dass procmail einen Fehler protokolliert, wenn die Ausführung fehlgeschlagen ist.

Vergewissern Sie sich auf jeden Fall, dass der Benutzer (uid), mit dem procmail ausgeführt wird, die richtigen Rechte für die Ausführung Ihres Skripts hat. Binden Sie das Skript nur dann in procmail ein, wenn Sie den Test mit so etwas erfolgreich abgeschlossen haben (ersetzen Sie "procmail" durch die richtige uid):

\# sudo -u procmail /bin/sh -c '/bin/cat /work/scripts/mail.txt | /usr/bin/python /work/scripts/privilege\_emails\_forward.py'

Je nach Ihrer sudo-Konfiguration müssen Sie dies als Root ausführen. Oh, und stellen Sie sicher, dass Sie absolute Dateipfade verwenden.

0 Stimmen

Toller Paprika! Ich habe versucht, das Skript auszuführen, das Sie angegeben haben, wobei procmail durch webmail (aktueller Benutzer) ersetzt wurde, und mein Skript wurde ausgeführt. Aber wenn ich eine Mail erhalte (sei es von irgendjemandem), führt mein procmail die procmailrc aus, richtig? Wer ist also der richtige Benutzer, um das Skript auszuführen?

0 Stimmen

Paprika! Um es klar zu erklären, mein benutzerdefiniertes Python-Skript hat genügend Berechtigungen (777), trotzdem wird es nicht automatisch ausgeführt, wenn ich eine E-Mail erhalte

1 Stimmen

Um herauszufinden, unter welchem Benutzer Ihr procmail-Skript ausgeführt wird, ersetzen Sie die Skript-Zeile in Ihrer procmailrc durch diese: '| /usr/bin/id -un > /tmp/procmailuser' Vergessen Sie nicht das vorangestellte Pipe-Symbol! Danach sollte 'cat /tmp/procmailuser' den Benutzer anzeigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X