Meta

Meta

Cco[e-mail protegido]usuário, nós fazemosnãoquero que as pessoas recebam essa lista Cco, além do[e-mail protegido]"do utilizador".

Meta

  1. Queremos arquivar todos os e-mails que passam pelo postfix, enviados e recebidos. A configuração usa:
  • pós-fixado,
  • autenticação dovecot com usuários Pam (extraindo do Ldap),
  • e entrega nas caixas de correio viaLMTP do pombal.
  1. Queremos incluir os destinatários Cco no arquivo de mensagens.

  2. Nós fazemosnãoquero que as pessoas recebam essa lista Cco, além do[e-mail protegido]"do utilizador".

Julgamento

  1. Usando sempre_bcc =[e-mail protegido] Funciona. Mas os destinatários Cco (que, de acordo com os direitos, estão no envelope como RCPT TO e não no cabeçalho) se perdem.

  2. Usando: (conformeQuais opções existem para arquivar emails do Postfix e preservar qualquer informação BCC no cabeçalho)

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

enquanto a expressão pcre é:

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

que funciona como um encanto: minha mensagem armazenada possui os cabeçalhos To:; CC; X-Envelope-Para. Se algum dia precisarmos investigar, podemos saber quem recebeu a mensagem até mesmo em Cco. (Nota: o X-Envelope-To inclui as pessoas To e Cc, bem como os destinatários dos domínios externos).

  1. Para eliminar o X-Envelope-To: Para enviar:
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks.pcre

Com o conteúdo:

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

Tudo bem até lá.

Problema

Para eliminar o X-Envelope-To para e-mails que não saem do servidor. Eu fiz:

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

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

Mas isto não é selectivo, mesmo[e-mail protegido]perde o cabeçalho que foi "salvo" na lista Cco.

Não consigo encontrar uma maneira de verificar seletivamente esse cabeçalho, pois ele apenas avalia a própria linha e não pode usar o destinatário para fazer uma condição (mesmo usando o "if" do pcre). (http://www.postfix.org/pcre_table.5.html)

Existe alguma variável que pode ser usada? Um pensamento foi: incluir "[e-mail protegido]"no cabeçalho X-Envelope-To anexado, no lmtp_header_checks.pcre, inclua algo como:[e-mail protegido]diferente de $LMTP_DELIVERY_RECIPIENT Delivered-To ou X-Delivered-To permanece um cabeçalho separado que o pcre não pode avaliar como uma variável.

Caso contrário, existe uma maneira de fazer com que o lmtp acione algum milter? E um filtro lmtp_milter simples que posso usar para isso?

Estou procurando há dias todos os documentos possíveis, desde já agradeço

Responder1

Oh sim ! Muito obrigado.

A linguagem da peneira não permitirá iteração em vários X-Envelope-Tocabeçalhos. Portanto, é necessário passá-lo para um programa externo.

Aqui está o que eu descobri:

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"

Se você abrir o arquivo com qualquer MUA, poderá ver o Cco reconstruído. NB: o script é um pouco mais longo, mas evita a duplicação das pessoas Para na lista Cco.

Responder2

Use a linguagem da peneira.

Como seu e-mail é entregue via LMTP para o Dovecot, você terá todos os recursos de endereçamento e edição de cabeçalho, com vários recursos lógicos mais complexos do que aqueles oferecidos pelas simples verificações de cabeçalho do Postfix.

Se você ainda não estiver usando o Pigeonhole Sieve, pode ser necessário habilitá-lo como um plugin Dovecot, habilitar as extensões necessárias em seu script e configurar um script adequado.

# 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

Então, em um script executado globalmente, ou especificamente para usuários que não verão o endereço do envelope, exclua o cabeçalho - a menos que entregue na caixa de correio de arquivo:

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

informação relacionada