
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
- 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.
Queremos incluir os destinatários Cco no arquivo de mensagens.
Nós fazemosnãoquero que as pessoas recebam essa lista Cco, além do[e-mail protegido]"do utilizador".
Julgamento
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.
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).
- 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-To
cabeç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";
}