Postfix: alterar remetente nas mensagens na fila

8

Após uma reinstalação completa, tivemos um problema com a configuração: o endereço do remetente estava errado e alguns destinatários (servidores de email) os rejeitaram.

Portanto, há muitos e-mails presos na fila do Postfix.

Idealmente, uma alteração do endereço do remetente diretamente nos emails em fila e, em seguida, liberando a fila seria ideal.

Eu tentei esta resposta que aborda esse mesmo problema. Mas as mensagens não parecem ser facilmente modificáveis ​​na versão que tenho (2.11.0).

Por exemplo, não há /var/spool/mqueuedir, mas, em vez disso,/var/spool/postfix/...

active
bounce
corrupt
defer
deferred
dev
etc
flush
hold
incoming
lib
maildrop
pid
private
public
saved
trace
usr

e o dir de interesse é deferred. Tentei modificar alguns arquivos lá, alterando o domínio errado pelo correto (e tomei cuidado para garantir que apenas esses fossem alterados).

Mas então, esses e-mails foram movidos para corrupt, o que significa que uma simples alteração de texto parece não funcionar (concluída com vi).

Alguma outra maneira mais limpa de alterar o remetente nos e-mails na fila?

e2-e4
fonte

Respostas:

19

Eu tentei esta resposta que aborda esse mesmo problema. Mas as mensagens não parecem ser facilmente modificáveis ​​na versão que tenho (2.11.0).

Por exemplo, não há / var / spool / mqueue dir, mas, em vez disso, / var / spool / postfix / ...

Eu quero esclarecer duas coisas.

  • Primeiro, essa resposta foi aplicada ao sendmail NÃO postfix.
  • Segundo, os arquivos de fila bruta de manipulação direta não eram suportados.

Então, você tem várias opções aqui

1. parâmetro smtp_generic_maps

Esta resposta foi inspirada por esta excelente resposta . Ele reescreverá o endereço antigo para o novo endereço automaticamente. Você pode definir o arquivo para mapear o endereço antigo para o novo endereço.

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    [email protected]       [email protected]

Não se esqueça de postmap /etc/postfix/genericcorrerpostfix reload

  • De cabeça para baixo : você não precisa reencaminhar a mensagem
  • Desvantagem: o Postfix reescreverá o endereço do remetente e do destinatário correspondente [email protected].

2. sender_canonical_address

Para superar a desvantagem da primeira opção, você pode usar sender_canonical_maps. Esta solução é baseada na sugestão do autor do Postfix . Assim como na primeira opção, você pode definir o arquivo para mapear o endereço antigo para o novo endereço.

/etc/postfix/main.cf:
    sender_canonical_maps = hash:/etc/postfix/sender_canonical

/etc/postfix/sender_canonical:
    [email protected]       [email protected]

Execute, em postmap /etc/postfix/sender_canonicalseguida, execute postfix reload. Devido ao fluxo da fila de postfix, você deve refazer a fila da fila afetada com o comandopostsuper -r queueid

  • De cabeça para baixo : o Postfix não reescreve o endereço do destinatário.
  • Desvantagem: você deve enfileirar todas as mensagens afetadas. Mas você pode enfileirar todos os adiados com um único comandopostsuper -r ALL deferred

3. manipulação direta da fila de postfix

Esta é uma maneira manual antiga de modificar a fila para processamento avançado. Esta resposta veio das listas de discussão dos usuários do postfix

Em resumo

  • Fila de extração

    # postsuper -h queueid
    # postcat -qbh queueid > tempfile.eml
    # vi tempfile.eml
    
  • Reenvie a fila e exclua a fila antiga

    # sendmail -f $sender $recipient < tempfile.eml
    # postsuper -d queueid
    

Para documentação do comando acima, consulte esta página

Nota: A
solução original das listas de discussão de usuários do postfix usa postcat -q queueid >tempfilepara extrair a fila. Este comando extrairá o cabeçalho, o corpo e as meta-informações da fila. Como apontou Azendale abaixo , sendmailse recusará a enviar este e-mail incorreto devido a metainformações .

O uso do -bhparâmetro além do qparâmetro fará com que o postcat filtre a saída apenas no cabeçalho e no corpo, sem incluir as meta-informações. Um benefício colateral disso é o tempfile no formato que a maioria dos clientes de email reconhece como formato .eml, permitindo visualizar a mensagem resultante (editada).

masegaloeh
fonte
1
Eu tentei isso e, pelo menos com a minha versão do postfix, não pareceu enviar a mensagem até que eu usei algo parecido postcat -qbh queueid >tempfile. (Benefício secundário: ele está no formato .eml.) Se eu apenas usasse -q, parecia não fazer nada quando executei o sendmail. Postfix versão 2.8.4. alguém pode confirmar isso? Nesse caso, vamos editar esta resposta.
Azendale
Olá @Azendale, reteste a terceira solução e, sim, precisamos usar qbhpara fazê-la funcionar. Adicionando a explicação na resposta atualizado ... :)
masegaloeh
Obrigado ! Estava procurando uma terceira solução como. é simplesmente perfeito!
Jazz
1

Greate writeup. Eu tive um problema com um servidor de email que estava em execução há alguns dias com configuração incorreta e, portanto, havia muitas filas que precisavam ser reenviadas com o novo destinatário. Então eu criei dois liners para percorrer todas as filas:

Primeiro, encontre todas as filas, coloque-as em espera, salve-as como arquivos .eml e reenvie-as:

for ID in `mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }' | tr -d \!`; do postsuper -h $ID; postcat -qbh $ID > tempfile$ID.eml; sendmail -f $sender $recipient < tempfile$ID.eml; done

Segundo para excluir as filas:

for ID in `mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }' | tr -d \!`; do postsuper -d $ID; done

Lembre-se de verificar se não há novas filas que não estão em espera antes de executar este último código. Faça isso emitindo isso e procure os IDs da fila sem um '!' no fim:

mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }'

O On podia facilmente colocar esses dois liners em um, mas senti que tinha mais controle verificando se os e-mails eram realmente recebidos antes de excluir as filas.

Jorn
fonte