Hoy en día usar una lista de distribución de correos para divulgar información es algo obsoleto, pero si parte del público de esa lista no tiene acceso a Internet es una buena alternativa. El problema viene cuando los administradores de esas listas comienzan a enviar mensajes con imágenes, documentos Word y PDFs incluso a aquellas personas de una intranet con acceso a la página donde están publicadas esas mismas informaciones. Peor si esas mismas personas acceden por módem analógico a su correo (sí, todavía sucede). Uno puede intentar decirles que envíen los mensajes sólo en texto plano o que reduzcan el tamaño, pero ellos también pueden no hacerte caso y seguir haciendo lo mismo.
Se me ocurrió que podía configurar el servidor Postfix para que le quitara todos los adjuntos que no fueran texto plano a los mensajes que vinieran de esas listas con destino a mis usuarios. Parece trivial, sin embargo tiene truco.
Lo primero es detectar que el correo viene de una lista y lo más conveniente es revisar las cabeceras del mensaje. Usamos para ello en el archivo /etc/postfix/main.cf
:
header_checks = regexp:/etc/postfix/header_checks
y en /etc/postfix/header_checks
/List-Id: <test.listas.example.com>/ FILTER delattach:
Con esto lograremos que cada vez que llegue un mensaje y tenga en su encabezado
List-Id: <test.listas.example.com>sea procesado por el transporte delattach. Éste encabezado podemos encontrarlo mirando el código fuente de cualquier mensaje enviado desde la lista.
Para definir el transporte delattach agregamos en el archivo /etc/postfix/master.cf
la siguiente línea:
delattach unix - n n - 20 pipe flags=Rq user=nobody argv=/usr/local/bin/delattach.py ${sender} ${recipient}
El script delattach.py
se puede descargar desde aquí y es una modificación del que se describe en éste post. Su función es revisar cada una de las partes del mensaje, si alguna no es del tipo text/plain
la descarta y luego le inyecta de el mensaje modificado a Postfix a través del puerto 10025. Postfix debe ser configurado para escuchar en ese puerto en localhost en /etc/postfix/master.cf
agregando:
127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks_style=host -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_address_mappings
Esta ultima configuración es la que generalmente se escribe cuando se va a utilizar algun servicio anti-spam como Amavis.