Domanda

Breve storia

Ho uno script PHP filtrare la posta in arrivo utilizzando un file .qmail. Lo script funziona perfettamente e registra tutte le attività, ma, per quanto ne so, l'ultima riga .qmail non dovrebbe essere eseguito quando il mio script restituisce un codice di uscita dot-qmail 99 che dovrebbe arrestare l'elaborazione di ulteriori linee .qmail.

Per farla:

Io sto usando una versione di Parallels Plesk Panel 9.3.0 sotto Linux 2.6.18-4-686.

La mia versione di PHP CLI è 5.2.0-8 + etch16 (CLI) (costruita: 24 Nov 2009 11:14:47).

Non soddisfatto Spamassassin, Dr. Web e zen.spamhaus.org ei loro risultati, ho deciso di creare il mio script PHP per filtrare tutta la posta in arrivo.

(Una parentesi ad alcuni di voi che potrebbe pensare "questo ragazzo sta reinventando la ruota": conosco i miei clienti personalmente e loro specifiche esigenze così, dopo migliaia di test, questo si è rivelato essere l'opzione migliore perché evita nero modelli contenitore e mi lascia controllare il processo in modo globale, anche liberando le risorse del server e le porte che si aprono altre funzionalità cool).

Comunque io sto avendo un momento difficile l'installazione dello script sul server.

QMailFilter è il mio script e si può vedere a http://titanpad.com/1IFDj1jvB0

Ho modificato un file .qmail esistente in /var/qmail/mailnames/customerdomain.com/username/.qmail essere:

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

QMailFilter PHP esegue script e tronchi perfettamente quando mando un messaggio a questo account utente, restituisce il codice di uscita (99 per scartare il messaggio e 0 per procedere alla riga successiva .qmail consegna del messaggio).

Risulta che trasporta il messaggio indipendentemente dei tanti codici di uscita che ho già provato.

Lo script (vedi linea 174) emette un codice di uscita di testo senza spazi prima o dopo. Ho provato exit($code), print $code, echo($code) e anche file_put_contents("php://stdout", $code), e anche exit(chr($code)).

codici dot-qmail sono:

0 - Success (vai alla riga successiva .qmail)

99 - Il successo e interruzione (non eseguire prossime righe)

100 - errore permanente (rimbalzo)

111 - Errore di morbida (ulteriore tentativo)

. Fonte: The Big Picture Qmail

Altri tentativi / esperimenti:

  1. Rimosso il shebang riga (#!/usr/bin/php) e cambiato la prima riga .qmail a |php -q /var/my/qmailfilter/qmailfilter

  2. Controllato l'ultima riga dello script per whitespacing

  3. è stato trovato

    Leggi dot-qmail file di uomo, ma nulla di conclusivo

  4. Registrato .qmail linee:

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

In questo caso ho ricevuto un messaggio che ha solo il codice di ritorno corretta senza alcun corpo di intestazione, soggetto o un messaggio.

  1. commentate (#) la seconda linea .qmail, ma smesso di ricevere qualsiasi tipo di messaggi.

  2. A cura /var/qmail/control/defaultdelivery per aggiungere una prima linea:

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

e file utente .qmail rinominato _qmail. Stessi risultati.

Dovrei consegnare il messaggio tramite script PHP e dimenticare i codici di uscita?

Se è così, è sufficiente per salvare il messaggio per l'utente Maildir / nuova?

Se è così, è il messaggio di nome di file importanti?

Qualsiasi idea sarà apprezzato. Grazie mille!

UPDATE: Per quelli di voi che ne hanno bisogno, ho pubblicato la sceneggiatura finale al icebex.com tagliare QMailFilter

È stato utile?

Soluzione

ho preso solo una rapida occhiata al codice, ma sembrava si stesse utilizzando valori di stringa. exit('99') e exit(99) non sono gli stessi. Assicurarsi di utilizzare interi e non stringhe.

  • exit ('99' ) stamperà 99 e restituire 0.

  • di uscita (99) restituirà 99.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top