Frage

Kurzgeschichte

Ich habe einen PHP-Skript filtert eingehende E-Mails bekommt eine .qmail-Datei. Das Skript funktioniert sehr gut und protokolliert alle Aktivitäten aber, soweit ich weiß, sollte die letzte .qmail Zeile nicht ausgeführt werden, wenn mein Skript gibt einen Punkt-qmail Exit-Code 99, die weiter .qmail Linien Verarbeitung stoppen sollten.

Lange Geschichte:

Ich bin mit einem Parallels Plesk Panel-Version 9.3.0 unter Linux 2.6.18-4-686.

Mein PHP CLI-Version ist 5.2.0-8 + etch16 (cli) (gebaut: 24. November 2009 11.14.47).

Nicht zufrieden mit Spamassassin, Dr. Web und zen.spamhaus.org und ihren Ergebnissen, habe ich beschlossen, meinen eigenen PHP-Skript erstellen zum Filtern aller eingehenden E-Mails.

(Ein beiseite einige von euch, die vielleicht denken, „dieser Kerl das Rad neu zu erfinden“: Ich weiß, dass meine Kunden persönlich und ihre spezifischen Bedürfnisse so, nach Tausenden von Tests, ist dies die beste Option entpuppten, weil es schwarz vermeidet Box-Modelle und läßt mich den Prozess in umfassenden Weise zu steuern, auch Server-Ressourcen und Türen zum Öffnen für andere kühle Funktionalität zu befreien).

Doch ich habe eine harte Zeit mit dem Skript auf dem Server installiert wird.

QMailFilter mein Skript ist und Sie können es unter http://titanpad.com/1IFDj1jvB0

Ich bearbeitete eine vorhandene .qmail Datei in /var/qmail/mailnames/customerdomain.com/username/.qmail zu sein:

|/var/my/qmailfilter/qmailfilter
|/usr/bin/deliverquota ./Maildir

QMailFilter PHP-Skript ausführt und Protokolle perfekt, wenn ich eine Nachricht an dieses Benutzerkonto zu senden, geben den Exit-Code (99 für die Nachrichten und 0 für die Verfahren zum nächsten .qmail Linie Verwerfen der Nachricht liefert).

Es stellte sich heraus, dass er die Nachricht unabhängig von den vielen Exit-Codes liefert habe ich schon versucht.

Das Skript (siehe Linie 174) gibt einen Text Exit-Code ohne Leerzeichen vor oder nach. Ich habe versucht, exit($code), print $code, echo($code) und sogar file_put_contents("php://stdout", $code), und auch exit(chr($code)).

dot-qmail Codes sind:

0 - Erfolg (nächste .qmail Linie)

99 - Erfolg und Abbruch (nicht ausführen nächste Zeilen)

100 - permanente Fehler (Bounce)

111 - Soft-Fehler (Wiederholungs später)

. Quelle: The Big Picture Qmail

Andere Versuche / Experimente:

  1. Entfernt die shebang Linie (#!/usr/bin/php) und die erste .qmail Linie |php -q /var/my/qmailfilter/qmailfilter

  2. geändert
  3. die letzte Zeile des Skripts Checked für whitespacing

  4. Lesen Sie dot-qmail man file aber nichts schlüssig gefunden wurde

  5. Dabei seit .qmail Zeilen:

    | / var / my / QMailFilter / QMailFilter | / usr / bin / deliverquota ./Maildir

In diesem Fall habe ich eine Nachricht nur die ordnungsgemäße Rückgabe Code ohne Header, Betreff oder Nachrichtentext.

  1. kommentiert out (#) die zweite .qmail Linie, aber angehalten, jede Art von Nachrichten zu empfangen.

  2. Edited /var/qmail/control/defaultdelivery eine erste Zeile hinzufügen:

    | php / var / my / QMailFilter / QMailFilter | / Usr / bin / deliverquota ./Maildir

und umbenannten Benutzer .qmail Datei zu _qmail. Gleiche Ergebnisse.

Soll ich liefern die Nachricht über PHP-Skript und Exit-Codes vergessen?

Wenn ja, ist es genug, um die Nachricht an den Benutzer Maildir / neu zu speichern?

Wenn ja, ist die Meldung Dateinamen wichtig?

Jede mögliche Idee geschätzt. Vielen Dank!

UPDATE: Für diejenigen, die es brauchen, veröffentlichte ich die endgültige Skript bei icebex.com slash QMailFilter

War es hilfreich?

Lösung

Ich habe nur einen kurzen Blick auf den Code, aber es sah aus wie Sie String-Werte verwendet wurden. exit('99') und exit(99) ist nicht das gleiche. Achten Sie darauf, ganze Zahlen und keine Strings.

  • exit ('99' ) wird 99 drucken und 0 zurück.

  • Ausfahrt (99) wird 99 zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top