Pregunta

Breve historia

Tengo un script PHP filtrar correo entrante mediante un archivo .qmail. El script funciona perfectamente bien y registra toda la actividad, pero, hasta donde yo sé, la última línea de .qmail no debe ser ejecutado cuando mi script devuelve un código de salida dot-qmail 99 que debe detener el procesamiento de otras líneas .qmail.

Es una larga historia:

Estoy usando una versión de Parallels Panel 9.3.0 en Linux 2.6.18-4-686.

Mi versión PHP CLI es 5.2.0-8 + etch16 (CLI) (construida: 24 Nov 2009 11:14:47).

No satisfecho con Spamassassin, Dr. Web y zen.spamhaus.org y sus resultados, decidí crear mi propio script PHP para filtrar todo el correo entrante.

(Un aparte a algunos de ustedes que puedan pensar "este tipo es reinventar la rueda": Sé que mis clientes personalmente y sus necesidades específicas por lo que, después de miles de pruebas, esto resultó ser la mejor opción, ya que evita negro modelos de cajas y me permite controlar el proceso de manera integral, así como liberar los recursos del servidor y abrir las puertas a otras funcionalidades frío).

Sin embargo estoy teniendo dificultades para instalar la secuencia de comandos en el servidor.

QMailFilter es mi guión y se puede ver que en http://titanpad.com/1IFDj1jvB0

Me editado un archivo existente en .qmail /var/qmail/mailnames/customerdomain.com/username/.qmail ser:

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

ejecuta y registros de secuencia de comandos QMailFilter PHP perfectamente cuando envío un mensaje a esta cuenta de usuario, devuelve el código de salida (99 para descartar mensaje y 0 para proceder a la siguiente línea .qmail la entrega del mensaje).

Resulta que entrega el mensaje, independientemente de los muchos códigos de salida que ya he probado.

El script (véase la línea 174) da salida a un código de salida de texto sin ningún espacio en blanco antes o después. Probé exit($code), print $code, echo($code) e incluso file_put_contents("php://stdout", $code), y también exit(chr($code)).

dot-qmail códigos son:

0 - Éxito (ir a la siguiente línea .qmail)

99 - El éxito y el aborto (no ejecute siguientes líneas)

100 - error permanente (rebote)

111 - error suave (reintento posterior)

Fuente:. The Big Qmail imagen

Otros intentos / experimentos:

  1. Se ha quitado la shebang línea (#!/usr/bin/php) y cambió la primera línea de .qmail a |php -q /var/my/qmailfilter/qmailfilter

  2. A cuadros de la última línea del guión de whitespacing

  3. Se encontró

    file hombre leyó dot-qmail, pero nada concluyente

  4. Usuario .qmail líneas:

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

En este caso he recibido un mensaje que tiene solamente el código de retorno adecuada sin ningún cuerpo de cabecera, tema o mensaje.

  1. comentada (#) la segunda línea .qmail, pero dejó de recibir cualquier tipo de mensajes.

  2. Editado /var/qmail/control/defaultdelivery para añadir una primera línea:

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

y el archivo .qmail usuario ha cambiado el nombre a _qmail. Mismos resultados.

tengo que entregar el mensaje a través de script PHP y olvidar los códigos de salida?

Si es así, ¿es suficiente para guardar el mensaje al usuario Maildir / nuevo?

Si es así, es el mensaje de nombre de archivo importante?

Cualquier idea será apreciada. ¡Muchas gracias!

ACTUALIZACIÓN: Para aquellos que lo necesitan, que publicó el guión final en icebex.com reducir QMailFilter

¿Fue útil?

Solución

Sólo tomé un vistazo rápido al código, pero parecía que estaba usando los valores de cadena. exit('99') y exit(99) no son los mismos. Asegúrese de que utiliza los números enteros y no cadenas.

  • salida (99' ) se imprimirá 99 y devuelve 0.

  • salida (99) devolverá 99.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top