procmail reescribe la línea de asunto si el usuario destinatario del correo electrónico no pasa la prueba de coincidencia

procmail reescribe la línea de asunto si el usuario destinatario del correo electrónico no pasa la prueba de coincidencia

Tengo un usuario local de procmail "bob".

Si llega un correo electrónico y coincide[correo electrónico protegido], entonces no se debe tomar ninguna medida.

Sin embargo, si llega un correo electrónico y es [cualquier otra cosa]@dominio.com, me gustaría reescribir la línea de asunto para insertar "[spam]" al frente de la línea de asunto.

Por lo tanto, es una coincidencia inversa en "bob@" (coincidencia en cualquier otra cosa que no sea bob@) y conservamos la línea de asunto original, simplemente anteponiendo "[spam]" al frente.

¿Cómo puedo hacer eso con Procmail?

Respuesta1

Sus requisitos son bastante confusos. Procmail puede coincidir con cualquier cadena, pero ¿realmente quiere buscar la cadena en cualquier parte del mensaje? ¿Y realmente quieres ignorar los mensajes que no domain.comestán incluidos a los efectos de esta regla?

:0 HB
* ! ()\<bob@domain\.com\>
* @domain\.com\>
{
    :0fhw
    * ^Subject:\/.+
    | formail -I"Subject: [spam]$MATCH"
}

Los límites \<de \>las palabras y evitan la coincidencia en subcadenas como tombobo subdomain.complete.orgy los paréntesis vacíos son un truco porque Procmail es extraño con las expresiones regulares que comienzan con una barra invertida.

Si quiere decir que desea buscar solo en los encabezados, elimine el HBde la primera línea de dos puntos (puede dejarlo, Hpero ese es el valor predeterminado si no coloca ninguna bandera). Si desea hacer coincidir un encabezado específico, explíquelo. Si desea examinar el destinatario específicamente, la ^TO_macro le permite hacerlo fácilmente en varios encabezados diferentes ( To:,, Cc:etc.).

:0fhw
* ! ^TO_bob@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"

Debido a que eliminamos las HBbanderas, podemos combinar lo que antes eran dos recetas con banderas diferentes. El segundo ^TO_busca cualquier dirección que incluya bob, que sin embargo ya fue excluida por la condición negada anterior.

Esto todavía tiene algunos casos extremos que podrían necesitar ser explorados más a fondo; Si puede editar su pregunta para aclararla, tal vez pueda actualizarla para cubrir más que lo básico.

Sin embargo, SMTP no requiere que se indique el destinatario en los encabezados. El caso clásico es Bcc:el que también es esencialmente el mecanismo utilizado por muchas listas de correo. Quizás su MTA indique el destinatario, Delivered-To:pero hablando propiamente, este tipo de filtro se implementa mejor en el MTA.

información relacionada