Como configuro o postfix para armazenar emails em um arquivo em vez de retransmiti-lo?

9

Quero executar uma cópia de teste de um servidor de produção em um ambiente local. O sistema executa um aplicativo PHP, que envia email para clientes em vários cenários e eu quero garantir que nenhum email seja enviado do ambiente de armazenamento temporário.

Posso ajustar o código para que ele use um remetente fictício de e-mail, mas eu gostaria de executar exatamente o mesmo código que o ambiente de produção. Posso usar um MTA diferente (o Postfix é exatamente o que usamos na produção), mas eu gostaria de algo fácil de configurar no Debian / Ubuntu :)

Portanto, gostaria de configurar a instalação local do Postfix para armazenar todos os emails em (um ou mais) arquivos em vez de retransmiti-los. Na verdade, eu realmente não me importo com o modo como ele é armazenado, desde que seja possível verificar o e-mail enviado. Mesmo uma opção de configuração que diz ao postfix para manter o email na fila de emails funcionaria (eu posso limpar a fila quando recarregar o servidor de temporariedade com uma cópia da produção).

Sei que isso é possível, mas não encontrei nenhuma boa solução on-line para o que parece ser uma necessidade bastante comum.

Obrigado!

GomoX
fonte

Respostas:

12

Criei um novo transporte com um comando de pipe que grava emails em um arquivo.

Basicamente:

  1. Crie um usuário que seja o proprietário do email (ou use um existente). Eu chamei meuemail
  2. mkdir /home/email/bin
  3. Coloque o seguinte script em /home/email/bin/mail_eater(isso usa PHP, mas você pode escrever sua própria versão em qualquer idioma que desejar, apenas anexa stdin a um arquivo):

    #!/usr/bin/php
    <?php
    $fd = fopen("php://stdin", "r");
    $email = "";
    while (!feof($fd)) {
        $email .= fread($fd, 1024);
    }
    fclose($fd);
    $fh = fopen('/home/email/email.txt','a');
    fwrite($fh, $email."\n-------------------------------------------------------\n\n");
    fclose($fh);
    
  4. chmod a+x /home/email/bin/mail_eater
  5. touch /home/email/email.txt
  6. chmod a+r /home/email/email.txt
  7. Crie um novo transporte usando esse arquivo anexando a seguinte linha master.cf:

    file_route unix -    n    n    -    -    pipe user=email  argv=/home/email/bin/mail_eater
    
  8. Use isso como o transporte padrão em main.cf:

    default_transport = file_route
    

Lá :)

GomoX
fonte
3

Você pode colocar esses domínios $mydestinationem main.cf, para que o postfix o entregue localmente.

Você pode configurar diferentes usuários locais, se desejar, ou configurar um endereço geral para entregar emails em apenas uma conta, mais detalhes aqui: http://www.postfix.org/ADDRESS_REWRITING_README.html#luser_relay

Para todos os domínios:

mydestination = pcre:/etc/postfix/mydestinations

e /etc/postfix/mydestinationsdeve conter

/.*/    ACCEPT

Não posso testar agora, mas deve funcionar.

Laurentiu Roescu
fonte
Não sei como são os domínios de destino (eles vêm de um banco de dados real de clientes). Vou verificar o link embora.
GomoX 22/11/12
Obrigado pela atualização, publiquei minha própria solução para o problema, pois parece "mais limpo", mas a sua parece que deve funcionar também.
GomoX 27/11/2012
Para funcionar como pretendido, isso também requer configuração local_recipient_maps = . Está descrito no link que você forneceu, mas acho que também deve ser mencionado na resposta.
jojman
2

tente (em main.cf):

defer_transports = smtp

você pode ver a fila postqueue -pe assistir ao conteúdo compostcat

Arek B.
fonte
0

Dependendo da sua distribuição, você pode olhar para "nullmailer". Este é um MTA de retransmissão, que retransmite para outro SMTP na sua rede ou remoto. Isso poderia muito bem ser um SMTP inválido e, nesse caso, provavelmente o colocaria apenas em uma fila em uma pasta na máquina.

No debian e no ubuntu, isso está disponível como um MTA de substituição para o seu sistema.

jishi
fonte
0

Isso é copiado e ligeiramente modificado do meu blog http://blog.malowa.de/2011/04/postfix-as-spam-trap-server.html :

Você nem precisa configurar o Postfix para atuar como um nullmailer. O Postfix é enviado com uma ferramenta elegante chamada smtp-sinkque faz o truque. O smtp-sink destina-se principalmente a atuar como uma ferramenta de teste para clientes SMTP que precisam de um servidor para jogar. Assim, você pode configurá-lo para registrar toda a conversa ou até despejar cada email recebido em um arquivo. O último é necessário para um nullmailer.

Não há arquivo de configuração para configurar o smtp-sink. Tudo é feito através das opções da linha de comando.

smtp-sink -c -d "%Y%m%d%H/%M." -f . -u postfix -R /tmp/ -B "550 5.3.0 The recipient does not like your mail. Don't try again." -h spamtrap.example.com 25 1024

Vamos dar uma olhada em cada parâmetro.

-u postfix
Runs the program under the user "postfix"
-R /tmp/
Sets the output directory to /tmp/. In this directory the mails will be stored. If you have a high spam volume (hundreds of Spam per minute) it is recommended to write the mails to a ramdisk
-d "%Y%m%d%H/%M."
Writes the mail to a directory of the format "YearMonthDayHour" and in this directory the files are name "Month.RandomID". Note that the dates are in UTC
-c
Write statistics about connection counts and message counts to stdout while running
-f .
Reject the mail after END-OF-DATA. But the mail will be saved. Cool, isn't it?!
-B "550 5.3.0 The recipient does not like your mail. Don't try again"
This is the rejection message after END-OF-DATA.
-h spamtrap.example.com
Announce the hostname spamtrap.example.com
25
The port to listen on. Can be prepended with an IP or host if you want to bind on a special interface.
1024
The backlog count of connections that can wait in the TCP/IP stack before they get a free slot for sending mail.

Você pode encontrar mais informações na página de manual do smtp-sink, mas estas são as mais importantes para executar uma armadilha de spam abrangente. Nesta configuração, o programa aceita emails com qualquer tamanho, de qualquer remetente a qualquer destinatário com IPv4 e IPv6. As únicas restrições são que existem apenas 256 conexões simultâneas possíveis com 1024 conexões na fila e o programa é sinalizado como experimental. Portanto, não use smtp-sink em um ambiente de produção.

A opção -B é válida apenas nas versões mais recentes do Postfix. No 2.7.1 está faltando. No 2.8.2 está presente. Em algum lugar entre ele foi introduzido.

mailq
fonte