Use o procmail para entregar a stdout e um segundo servidor

1

Eu gostaria que um servidor Postfix entregasse cada mensagem para um determinado transporte, bem como retransmitisse para um segundo servidor. No master.cf, eu tenho o seguinte transporte:

zarafa unix - n n - 10 pipe
  flags= user=vmail argv=/usr/bin/zarafa-dagent ${user}

Como não consigo fazer o Postfix entregar em dois transportes, o que eu provavelmente preciso é um transporte wrapper, talvez usando o procmail, que entrega para zarafa-dagent e transmite para um segundo servidor (não apenas para frente para um endereço; relay para um segundo servidor).

Também pode ser um script que chame o sendmail ou qualquer outra coisa, mas no momento não sei como proceder.

coisas como bcc_maps não funcionam, porque não produzem cabeçalhos X-Original-To e Delivered-To corretos. Ele precisa ser enviado para o mesmo destinatário no servidor que está sendo retransmitido como o servidor original.

Editar: talvez eu deva esclarecer alguma coisa: na máquina de backup, não posso ter as mesmas caixas de correio que a principal; há apenas uma caixa. Se eu tivesse todas as caixas de correio, um BCC para esse servidor estaria bem. Mas como no primário, o e-mail é entregue usando o transporte zarafa personalizado, não há como eu deixar o secundário saber quais caixas de correio existem. Daí eu queria retransmitir para esse servidor, e esse servidor também se considera local para o domínio em questão. Dessa forma, o cabeçalho Delivered-To me diria qual foi o RCTP original.

    
por Halfgaar 07.06.2012 / 14:45

3 respostas

1

Com a ajuda esta página , acho que estou quase lá, mas ainda não. Eu não sei como retransmitir para o segundo servidor ainda, do bash.

Eu fiz um transporte em master.cf:

filtertest    unix  -       n       n       -       10      pipe
    flags=Rq user=filter null_sender=
    argv=/usr/local/bin/filter-test.sh -f ${sender} -- ${recipient}

Eu incluí a opção content_filter para o transporte smtp (irá adicioná-lo ao smtps também quando ele funciona):

smtp      inet  n       -       -       -       -       smtpd
    -o content_filter=filtertest:dummy

Eu tenho o script filtertest:

#!/bin/bash

# Simple shell-based filter. It is meant to be invoked as follows:
#       /path/to/script -f sender recipients...

# Localize these. The -G option does nothing before Postfix 2.3.
INSPECT_DIR=/var/spool/filter
SENDMAIL="/usr/sbin/sendmail -G -i" # NEVER NEVER NEVER use "-t" here.

# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || {
    echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }

cat >in.$$ || {
    echo Cannot save mail to file; exit $EX_TEMPFAIL; }

# Relay message to backup server
#TODO: how?

$SENDMAIL "$@" <in.$$

exit $?

O que resta é: como eu faço este script bash retransmitir (não encaminhar) o conteúdo do arquivo tmp para um segundo servidor?

    
por 15.06.2012 / 16:27
1

Eu precisava fazer algo semelhante e, na sua pergunta, parece que o postfix não permite mais de uma entrega de cada vez.
A maneira que eu consegui resolver o meu problema é usar um pequeno wrapper para pegar o pedido e depois executar os despachos necessários. O único problema é que o postfix diz "Ok, entregue!", Mas não sabe se a entrega foi bem sucedida ou não.
De qualquer forma, este é o código do meu wrapper:

#!/bin/bash
USER='echo $2 | awk -F"@" '{print $1}''
NEXTHOP='echo $2 | awk -F"@" '{print $2}''
/usr/bin/sudo -u vmail /usr/bin/procmail -t -m USER=$USER NEXTHOP=$NEXTHOP /etc/procmailrc

"USER" é o nome de usuário contido no e-mail, "NEXTHOP" é o domínio contido no e-mail ... para ficar claro: USER @ NEXTHOP.

A mensagem seria então passada como stdin para o script, permitindo que você a buscasse e usasse à sua própria discrição.

Eu só espero que seja útil para você:)

    
por 23.06.2012 / 15:16
0

Você pode tentar usar o redoma ou instalar MIMEDefang e use add_recipient para enviar e-mails para qualquer outro servidor que você queira.

    
por 18.06.2012 / 10:04