Cómo filtrar y entregar un mensaje en Procmail

Cómo filtrar y entregar un mensaje en Procmail

Reescribo la línea de asunto para ciertos correos entrantes dependiendo del campo PARA::

:0fhw
* ! ^TO_user@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPAM]$MATCH"

El código anterior (de mi pregunta anteriorprocmail reescribe la línea de asunto si el usuario destinatario del correo electrónico no pasa la prueba de coincidencia) funciona perfectamente - si recibo correo de algo DISTINTO DE[correo electrónico protegido], la línea de asunto se reescribe como [SPAM] (asunto original)

Pero me gustaría hacer múltiples condicionales como este: el bloque de trabajo anterior será el final, pero antes de eso, me gustaría reescribir la línea de asunto si el TO coincide con una dirección diferente.

Así que agregué este bloque justo encima:

:0fh
* ^TO_special@domain\.com
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH"
$DEFAULT

... y esto funciona: correos electrónicos enviados a '[correo electrónico protegido]' se reescribe su línea de asunto.

El problema es que Procmail no se detiene: pasa alpróximobloquearlo y lo reescribe nuevamente. Entonces, los correos electrónicos enviados deben [email protected]reescribirse sus líneas de asunto como:

[SPAM] [ESPECIAL] Línea de asunto original, bla, bla

¿Por qué es esto? ¿Por qué la $DEFAULTacción al final del primer bloque no hace que Procmail detenga el procesamiento de ese correo electrónico?

¿Cómo puedo hacer coincidir el nuevo bloque ydetener¿Procesar ese correo y terminar con él?

Respuesta1

Al $DEFAULTfinal hay un error de sintaxis. No puede especificar varias acciones en la misma receta.

Lo que puedes hacer es dividirlo en dos recetas; o, en este caso, simplemente combinar la reescritura y la entrega.

:0:
* ^TO_special@domain\.com
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH" >>$DEFAULT

Esto ya no tiene las fhbanderas porque queremos enviar todo el mensaje (no solo los encabezados, que hsí los tiene) y queremos entregar, no capturar, los resultados de la canalización a Procmail (que sí los ftiene).

Esto supone que $DEFAULTes un archivo, no un directorio; y así también agregamos un segundo :para especificar el bloqueo.

Si desea especificar dos acciones bajo un único conjunto de condiciones, puede usar llaves con múltiples recetas dentro de ellas. Cada receta puede tener cero o más condiciones pero sólo una acción.

:0
* ^TO_special@domain\.com
* ^Subject:\/.+
{
    :0fhw
    | formail -I"Subject: [SPECIAL]$MATCH"

    :0:
    $DEFAULT
}

pero en este caso es una complicación innecesaria.

(Quizás también sería más idiomático trasladar la ^Subject:condición a la formailreceta a la que pertenece lógicamente, pero de todos modos esto es solo una tangente).

También tangencialmente, tal vez asegúrese de que PATHsea correcto desde el principio .procmailrcpara evitar detallar la ruta completa a utilidades externas como formail.

información relacionada