Meta

Meta

Cco el[correo electrónico protegido]usuario, lo hacemosnoQuiero que la gente reciba esa lista CCO, además de la[correo electrónico protegido]"usuario".

Meta

  1. Queremos archivar todos los correos electrónicos que pasan por postfix, enviados y recibidos. La configuración utiliza:
  • sufijo,
  • autenticación de palomar con usuarios de Pam (extraído de Ldap),
  • y entrega a los buzones de correo a través deLMTP de Palomar.
  1. Queremos incluir a los destinatarios de CCO en el archivo de mensajes.

  2. HacemosnoQuiero que la gente reciba esa lista CCO, además de la[correo electrónico protegido]"usuario".

Ensayo

  1. Usando siempre_bcc =[correo electrónico protegido] Obras. Pero los destinatarios de CCO (que según los derechos están en el sobre como RCPT TO y no en un encabezado) se pierden.

  2. Usando: (según¿Qué opciones existen para archivar el correo electrónico de Postfix y conservar la información BCC en el encabezado?)

main.cf
smtpd_recipient_restrictions =
  check_recipient_access pcre:/etc/postfix/prepend.pcre

mientras que la expresión pcre es:

prepend.pcre
/(.+)/          PREPEND X-Envelope-To: $1

que funciona a las mil maravillas: mi mensaje almacenado tiene los encabezados Para:; CC; X-Sobre-A. Si algún día necesitamos profundizar en ello, podremos saber quién recibió el mensaje incluso en Cco. (NB: el X-Sobre-Para incluye las personas Para y Cc, así como los destinatarios de los dominios externos).

  1. Para eliminar el X-Sobre-Para: Para enviar:
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks.pcre

Con el contenido:

smtp_header_checks.pcre
/^X-Envelope-To:/               IGNORE

Todo bien hasta ahí.

Problema

Eliminar el X-Envelope-To para los correos electrónicos que no salen del servidor. Hice:

lmtp_header_checks = pcre:/etc/postfix/lmtp_header_checks.pcre

lmtp_header_checks.pcre
/^X-Envelope-To:/               IGNORE

Pero esto no es selectivo, ni siquiera[correo electrónico protegido]pierde el encabezado que se "guardó" en la lista CCO.

No puedo encontrar una manera de verificar selectivamente ese encabezado, ya que solo evalúa la línea en sí y no puede usar el destinatario para establecer una condición (incluso usando el "si" del pcre). (http://www.postfix.org/pcre_table.5.html)

¿Hay alguna variable que se pueda utilizar? Una idea fue: incluir "[correo electrónico protegido]" en el encabezado X-Envelope-To antepuesto, en lmtp_header_checks.pcre, incluya algo como:[correo electrónico protegido]no igual a $LMTP_DELIVERY_RECIPIENT Delivered-To o X-Delivered-To siguen siendo un encabezado separado que pcre no puede evaluar como una variable.

De lo contrario, ¿hay alguna manera de hacer que lmtp active algo de milter? ¿Y un filtro lmtp_milter simple que puedo usar para eso?

He estado buscando durante días todos los documentos posibles. Gracias de antemano.

Respuesta1

Oh sí ! Muchas gracias.

El lenguaje tamiz no permitirá la iteración sobre múltiples X-Envelope-Toencabezados. Entonces es necesario pasarlo a un programa externo.

Esto es lo que se me ocurrió:

require "fileinto";
require "imap4flags";
require ["editheader", "envelope"];
require "vnd.dovecot.filter";
if header :contains "X-Spam-Flag" "YES"
{
   fileinto "Junk";
   stop;
}
if envelope :is "to" "[email protected]" {
   filter "EnvelopeToBcc.sh";
} else {
   deleteheader "X-Envelope-To";
}
#!/bin/bash
# Store mail in a variable
# input stream
mail=`cat /dev/stdin`
# Extract headers
envelope=$(echo "$mail" | formail -x X-Envelope-To | tr -d '\015')
tos=$(echo "$mail" | formail -x To  | tr -d '\015')
copies=$(echo "$mail" | formail -x Cc  | tr -d '\015')

# Loop excluding the To: fields and concatenate in variable
bcc=""
for i in $envelope; do
        if [[ ${tos} != *"${i}"* && ${copies} != *"${i}"* ]];then
                bcc="${bcc} ${i},"
        fi
done
# Eliminate trailing comma
bcc=$(echo $bcc | sed s/,$//)
# Add Bcc header to mail 
echo "${mail}" | formail -a "Bcc: $bcc"

Si abre el archivo con cualquier MUA, podrá ver el bcc reconstruido. NB: script un poco más largo pero evita la duplicación de Para las personas en la lista CCO.

Respuesta2

Utilice el lenguaje Sieve.

Dado que su correo se entrega a través de LMTP a Dovecot, tendrá todas las capacidades de edición de encabezados y direccionamiento allí, con un montón de capacidades lógicas más complejas que las que ofrecen las simples comprobaciones de encabezados de Postfix.

Si aún no está utilizando Pigeonhole Sieve, es posible que deba habilitarlo como complemento de Dovecot, habilitar las extensiones que necesita en su secuencia de comandos y configurar una secuencia de comandos adecuada.

# step1 enable sieve (append to $mail_plugins to *add*)
protocol lmtp {
  mail_plugins = $mail_plugins sieve
}
# step2 enable sieve extensions, as required (prefix with + to *add*)
plugin {
    sieve_extensions = +editheader
}
# step3 configure the path a of a script to be executed

Luego, en un script ejecutado globalmente, o específicamente para usuarios que no verán la dirección del sobre, elimine el encabezado, a menos que lo entregue al buzón de archivo:

require ["editheader", "envelope"];
if not envelope :is "to" "[email protected]" {
    deleteheader "X-Envelope-To";
}

información relacionada