Redirecionar todos os e-mails recebidos para um script

5

Não tenho ideia sobre a entrega de e-mails.

mas preciso redirecionar TODOS os e-mails recebidos (*@mydomain.com) para um script php.

estou usando o debian

Existe um servidor de email simples para fazer isso? (sem exim, postfix, etc)

eu só preciso redirecionar todas as solicitações de e-mail.

se isso não for possível sem o exim, o postfix, etc. como posso fazer isso?

obrigado!

    
por felix46r 03.08.2012 / 23:19

8 respostas

6

Quando você diz "um script PHP", você quer dizer um script PHP em um servidor web em outro lugar, ou um script PHP é executado na linha de comando localmente?

Eu enviei o e-mail para um site em outro lugar usando o exim4 e o curl, criando um transporte personalizado da seguinte forma:

send_to_site:
  driver = pipe
  command = /usr/bin/curl https://example.com/mail.php --data-urlencode "mail@-"
  user = nobody
  group = nogroup
  return_path_add
  delivery_date_add
  envelope_to_add

Se você estiver usando a opção "split configuration" do Debian, você deve criar um arquivo em /etc/exim4/conf.d/transport/ com este item. O command aqui passará todo o email (cabeçalhos e corpo) para mail.php na variável $_REQUEST["mail"] . Você precisará ter seu script PHP para lidar com os cabeçalhos.

Para acionar o transporte, você precisará ter um router configurado que corresponda ao email que deseja receber e use o transport acima para enviá-lo. Com a configuração dividida, os roteadores entram em /etc/exim4/conf.d/router/ . Para capturar ALL o e-mail de um domínio específico, não testei isso, mas acho que está correto:

catchall_mail:
  driver = accept
  domains = mydomain.com
  transport = send_to_site

A Debian numera os arquivos no diretório do roteador para configurar os roteadores de pedidos que foram registrados. O primeiro roteador correspondente será usado para manipular o email. Da minha configuração aqui, você provavelmente deseja numerar o seu em torno de 450 para ir atrás de aliases e antes dos roteadores que lidam com usuários locais como hubusers e procmail .

Após adicionar estes arquivos aos diretórios de transporte e roteador, você precisará executar update-exim4.conf para que o Debian crie o arquivo de configuração que o exim realmente lê.

    
por 04.08.2012 / 03:14
1

Você precisa configurar um POP3 ou (preferencialmente) um servidor IMAP. Em seguida, crie suas caixas de e-mail como normais. Use as funções PHP apropriadas para simular um cliente de e-mail e periodicamente pesquisar as caixas de e-mail para novos mensagens.

    
por 04.08.2012 / 00:52
1

Eu usaria o postfix para hospedar uma conta catchall @seudominio e, em seguida, faça com que o script use a caixa de correio da conta catchall como a base do seu script. A outra opção seria fazer algo semelhante ao que esse cara fez, mas apenas se você preferir que o e-mail seja canalizado em vez de ler de um diretório.

    
por 10.04.2013 / 17:27
1

Se você não deseja executar pacotes completos de servidores smtp como o postfix, exim4, então o fakeSMTP atende às suas necessidades. A seguir, a descrição do site

fakeSMTP is a PHP script written to act like any traditional postfix SMTP server. Used in conjunction with inted, the script is called when a mail client connects to port 25 on the server.

This script does not actually send any emails (although this could theoretically be combined with sendmail if one wanted to). It also does not contain any authorization functionality, and thus acts solely as a badly configured open SMTP relay. I wrote it to create a honeypot for spammers as well as for testing & proof of concept.

fakeSMTP.php pode ser baixado no link fornecido. A modificação /etc/inetd.conf como segue

smtp   stream    tcp    nowait    root    /path/to/fakeSMTP.php

Basicamente toda a conexão smtp de entrada será manipulada pelo fakeSMTP.php. Você deve incorporar seu script no fakeSMTP.php. Base no exemplo a seguir

$hp = new fakeSMTP;
$hp->serverHello = 'axllent.org ESMTP Postfix'; // Server identity (optional)
$hp->logFile = '/tmp/emails.log'); // Log the transaction files (optional)
$hp->receive();
if (!$hp->mail['rawEmail']) exit; // Script failed to receive a complete transaction
/* The script returns all the mail parts which you can process in $hp->mail(array) - read source for all details */

Seu script deve usar $hp->mail(array) para processamento de e-mail.

Eu não olhei para o código, mas você pode ter que modificá-lo para aceitar apenas e-mails do seu domínio.

Como Sirch menciona no comentário, você pode receber um grande volume de spam, já que este script / biblioteca não incorpora RBL, verificação de endereço nem amavis / spamassassin. Talvez seja um pouco trabalhoso se você for incorporá-los em seu próprio script.

Se você decidiu usar o postfix, para a integração RBL, amavis / spamassassin, você pode seguir a resposta em AQUI .

    
por 13.04.2013 / 12:46
0

Eu sei que você pode fazer algo assim com o hypermail, mas isso está escrito em perl. Não tenho certeza sobre uma implementação do php.

    
por 03.08.2012 / 23:45
0

Não tenho certeza se entendi corretamente o que você quer fazer, mas porque você simplesmente não recebe os e-mails usando o servidor de e-mail que você prefere e faz seu script PHP analisar as caixas de correio automaticamente (usando CRON possivelmente) procurando por novos e-mails , escolhendo os dados que você precisa e excluindo os e-mails, se você não precisar mais deles?

    
por 04.08.2012 / 00:19
0

Eu fiz isso com os domínios Postfix e virtual alias. Em main.cf :

virtual_alias_domains = domain.name #Make sure this does _not_ appear in mydestination
virtual_alias_maps = hash:/etc/postfix/virtual

Em /etc/postfix/virtual :

@domain.name    anything@localhost

Em /etc/aliases :

anything:    "|/path/to/script.php"

Quando os arquivos forem editados, execute postmap /etc/postfix/virtual , newaliases e service postfix reload para finalizar todas as novas configurações. Além disso, certifique-se de chmod +x do script PHP e de ter um hashbang PHP no topo.

    
por 16.04.2013 / 07:19
0

A solução mais simples (sem software extra) que vi até agora é usar a extensão PHP do IMAP para acessar (por IMAP) sua caixa postal.

Você pode encontrar informações sobre a atual documentação da extensão IMAP aqui: link

Em seguida, basta configurar o crontab para executar o script no período desejado.

    
por 16.04.2013 / 13:24