Somente sendmail local que entrega todas as mensagens para um diretório

7

Eu tenho uma máquina de desenvolvimento Ubuntu Server (12.04.1) que eu uso para desenvolver sites php e sites de e-commerce (como o Magento etc).

Como isso é para fins de desenvolvimento, e eu preciso testar com endereços de e-mail diferentes do meu, preciso de um jeito do comando sendmail aceitar um e-mail, mas não entregá-lo, mas arquivar é um lugar onde eu pode olhar para isso.

Qual é a maneira mais fácil de instalar um servidor de e-mail, de forma que o comando sendmail roteie TODOS os e-mails para um diretório local? ou seja, NÃO quero que qualquer correio seja entregue na Internet.

Eu tentei as etapas discutidas nesta pergunta ( servidor SMTP para entregar TODOS os e-mails para o usuário @ localhost ), mas parece que não funciona - recebo uma mensagem de erro em minha caixa de correio (local) informando que ela não pode entregar minha mensagem de teste (por exemplo, [email protected])

    
por Gareth 26.10.2012 / 16:54

4 respostas

6

Para responder a minha própria pergunta, usando o postfix isso é possível. Você tem que fazer duas coisas:

  1. Adicione as opções de configuração discutidas em servidor SMTP para entregar TODOS os e-mails para user @ localhost , adicione o seguinte ao seu arquivo /etc/postfix/main.cf:

    luser_relay = MYLOCALUSER@localhost
    local_recipient_maps =
    
  2. Usando a seguinte resposta no serverfault ( link ), adicionei o seguinte ( note que você precisa do pacote postfix-pcre instalado):

    Em /etc/postfix/main.cf:

     mydestination = pcre:/etc/postfix/mydestinations
    

    Em / etc / postfix / mydestinations

    /.*/         ACCEPT
    

Isso entregará TODOS os e-mails que o postfix manipula para o usuário local configurado definido no nº 1, portanto, não use isso para algo diferente do desenvolvimento.

    
por Gareth 26.10.2012 / 17:12
5
  

"Como isso é para fins de desenvolvimento, e eu preciso testar com endereços de e-mail diferentes do meu, preciso que o comando sendmail aceite um e-mail, mas não o entregue, mas arquivar é um lugar onde Eu posso olhar para isso. "

Você ainda precisará entregá-lo. Você só precisa substituir "onde" é entregue.

  

"Qual é a maneira mais fácil de instalar um servidor de e-mail, de modo que o comando sendmail direcione TODOS os e-mails para um diretório local? Ou seja, NÃO quero que nenhum e-mail seja entregue na Internet".

Isso pode realmente ser feito usando apenas o pacote de instalação padrão do postfix (não há necessidade de postfix-pcre).

1.) Seguindo um tutorial aqui , edite 2 linhas no /etc/postfix/master.cf file para evitar que qualquer email seja entregue externamente (fica preso na fila de correio local):

smtp      unix  -       -       -       -       -       local
relay     unix  -       -       -       -       -       local

2.) Crie um arquivo em /etc/postfix chamado virtual . Coloque a seguinte linha dentro desse arquivo, substituindo <USERNAME> pelo nome da conta de usuário local para a qual você deseja que todas as mensagens sejam entregues:

/.*/    <USERNAME>

3.) Execute o seguinte comando para criar o arquivo de banco de dados correto para o postfix pesquisar este novo "mapa de alias virtual". O novo arquivo de banco de dados gerado automaticamente será chamado "virtual.db"

sudo postmap /etc/postfix/virtual

4.) Adicione a seguinte linha a /etc/postfix/main.cf

virtual_alias_maps = regexp:/etc/postfix/virtual

5.) Reinicie o postfix:

sudo service postfix restart

Agora, todos os e-mails, independentemente do remetente, destinatário ou programa que aponte para esse servidor SMTP, serão entregues localmente ao usuário especificado. Existem inúmeras opções para ler / recuperar essas mensagens agora. Se você instalar um mensageiro IMAP ou POP3 (como dovecot ), poderá usar um Agente de Usuário de Email (Thunderbird, Outlook, etc. ) para se conectar à sua caixa de correio local e ler as mensagens.

    
por ZParrish 17.09.2014 / 16:25
2

Veja outra abordagem interessante aqui Como receber e-mails enviado com PHP no seu servidor local .

$ sudo mkdir /var/log/mail
$ sudo nano /usr/local/bin/sendmail

Adicione o seguinte script PHP a este novo arquivo "sendmail":

#!/usr/bin/php
<?php
$input = file_get_contents('php://stdin');
preg_match('|^To: (.*)|', $input, $matches);
$filename = tempnam('/var/log/mail', $matches[1] . '.');
file_put_contents($filename, $input);

Adicione sendmail_path = /usr/local/bin/sendmail a /etc/php5/apache2/php.ini .

$ sudo chmod 755 /usr/local/bin/sendmail
$ sudo chmod 777 /var/log/mail
$ sudo /etc/init.d/apache2 restart

Agora, todos os seus e-mails estão na pasta /var/log/mail .

P.S. Além disso, você pode querer adicionar shell_exec("chmod 777 /var/log/mail/ -R"); a /usr/local/bin/sendmail

    
por milkovsky 21.01.2014 / 19:47
0

Outra abordagem é executar um servidor "FakeSMTP" , um manipulador SMTP de várias plataformas; quem tem todo o propósito é receber e-mails, armazená-los e exibi-los com o seu cliente de e-mail configurado.

    
por tutuDajuju 12.07.2016 / 10:15