le script de filtrage de courrier PHP: codes de sortie ne sont pas reconnus dans le fichier .qmail

StackOverflow https://stackoverflow.com/questions/3673835

  •  01-10-2019
  •  | 
  •  

Question

Petite histoire

J'ai un script PHP filtrant le courrier entrant à l'aide d'un fichier .qmail. Le script fonctionne parfaitement bien et enregistre toutes les activités, mais, pour autant que je sache, la dernière ligne .qmail ne doit pas être exécutée lorsque retourne mon script un code de sortie dot-qmail 99 qui devrait cesser de traiter d'autres lignes de .qmail.

Longue histoire:

J'utilise une version de Parallels Plesk Panel 9.3.0 sous Linux 2.6.18-4-686.

version My PHP CLI est 5.2.0-8 + etch16 (cli) (construction: 24 novembre 2009 11:14:47).

Non satisfait de SpamAssassin, le Dr Web et zen.spamhaus.org et leurs résultats, j'ai décidé de créer mon propre script PHP pour filtrer tous les messages entrants.

(aparté à certains d'entre vous qui pourrait penser « ce gars-là est de réinventer la roue »: Je sais que mes clients personnellement et leurs besoins spécifiques ainsi, après des milliers de tests, cela se révèle être la meilleure option, car elle évite noir modèles de boîte et me permet de contrôler le processus de manière globale, ce qui libère également les ressources du serveur et des portes d'ouverture à d'autres fonctionnalités cool).

Cependant, je vais avoir du mal à installer le script sur le serveur.

QMailFilter est mon script et vous pouvez le voir à http://titanpad.com/1IFDj1jvB0

J'édité un fichier .qmail existant /var/qmail/mailnames/customerdomain.com/username/.qmail être:

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

Script QMailFilter PHP exécute et journaux parfaitement quand j'envoie un message à ce compte utilisateur, renvoie le code de sortie (99 pour rejeter un message et 0 pour procéder à la ligne suivante .qmail délivrant le message).

Il s'avère qu'il délivre le message des nombreux indépendamment des codes de sortie, je l'ai déjà essayé.

Le script (voir la ligne 174) émet un code de sortie de texte sans aucun espace avant ou après. J'ai essayé exit($code), print $code, echo($code) et même file_put_contents("php://stdout", $code), et aussi exit(chr($code)).

codes dot-qmail sont:

0 - Succès (aller à la ligne suivante .qmail)

99 - Succès et abort (ne pas exécuter lignes suivantes)

100 - erreur permanente (rebond)

111 - erreur logicielle (réessayer plus tard)

Source. The Big Qmail Picture

D'autres tentatives / expériences:

  1. Removed tralala ligne (#!/usr/bin/php) et changé la première ligne de .qmail à |php -q /var/my/qmailfilter/qmailfilter

  2. coché la dernière ligne du script pour whitespacing

  3. Lire fichier dot-qmail de l'homme, mais rien de concluant n'a été trouvée

  4. A rejoint .qmail lignes:

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

Dans ce cas, je reçu un message ayant seulement le bon code de retour sans tête, sujet ou le corps du message.

  1. ont commenté sur (#) la deuxième ligne de .qmail, mais a cessé de recevoir tout type de messages.

  2. Edité /var/qmail/control/defaultdelivery pour ajouter une première ligne:

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

et renomme fichier .qmail utilisateur à _qmail. Les mêmes résultats.

Devrais-je passer le message via un script PHP et oublier les codes de sortie?

Si oui, est-il suffisant pour sauver le message à l'utilisateur Maildir / new?

Si oui, est le nom du fichier de message important?

Toute idée sera appréciée. Merci beaucoup!

MISE À JOUR: Pour ceux d'entre vous qui en ont besoin, je publie le script final à icebex.com slash QMailFilter

Était-ce utile?

La solution

Je ne ai pris un coup d'œil sur le code, mais il semblait que vous utilisiez des valeurs de chaîne. exit('99') et exit(99) ne sont pas les mêmes. Assurez-vous d'utiliser des entiers et non des chaînes.

  • exit ('99' ) imprimera 99 et retour 0.

  • sortie (99) retournera 99.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top