Redirecionar todo o email recebido para um script Python

2

Gostaria de redirecionar todos os e-mails recebidos para *@example.com (da internet) para um script Python em execução no meu servidor, que fará vários trabalhos.

  • Eu já fiz um registro MX de DNS para example.com , direcionando meu servidor
  • Eu fiz muitas tentativas e erros com postfix e exim, e nada estava funcionando, então removi todos eles: apt-get remove postfix e apt-get remove exim4 , então estou pronto para começar com uma nova instalação de um deles (qual deles permitiria a menor solução para essa tarefa específica?)
Quais são as principais etapas para direcionar todo o email de entrada *@example.com para um script Python? (incluindo: dizer ao MTA para aceitar emails vindos de fora do servidor, de toda a Internet, etc.) )

    
por Basj 21.11.2017 / 15:04

2 respostas

6

procmail é considerado problemático por Philip Guenther (e é bem provável que inútil nesse caso, pois .forward arquivos ou equivalentes podem enviar os e-mails diretamente para seu programa, ignorando a complexidade desnecessária de procmail ).

Executive summary: delete the procmail port; the code is not safe and should not be used as a basis for any further work.

As people may know, I was the upstream maintainer of procmail back in the late 1990's though 2001.

Então, alguma outra solução pode ser aconselhável; isso depende do agente de transporte de email (MTA). Outra opção seria usar o MTA para entregar em um arquivo local ou IMAP e, em seguida, fazer com que seu programa analise esse arquivo ou o IMAP. Isto tem o bônus de continuar aceitando e-mail e salvando-o em algum lugar; o que acontece quando seu programa está com bugs ou falha em executar? Menos de um problema do que durante a entrega de e-mail ao vivo ...

Exim

Provavelmente, copie o método Sendmail .forward ou descubra como fazer isso corretamente no Eximese. (Abortei, já que demorava muito para cavar os documentos do Exim.) Existe elspy se você quiser fazer a varredura no tempo SMTP em uma moda MILTER ...

Postfix

link

Puxa, isso parece longo e complicado.

Sendmail

Defina uma entrada mailertable para encaminhar todos os emails para o domínio (e .domain para subdomínios, se necessário) para um usuário local, aqui jdoe

example.com     local:jdoe
.example.com    local:jdoe

e, em seguida, configure um arquivo .forward para esse usuário para executar o código necessário

$ cat ~jdoe/.forward
"|/etc/smrsh/process"
$ 

que pode ser tão simples quanto

$ cat /etc/smrsh/process
#!/bin/sh
cat >> /home/jdoe/allmails
$ 

porque os e-mails são alimentados na entrada padrão (isso pode ser ruim se várias instâncias desse process forem executadas de uma só vez; presumivelmente seu código real manipula tais condições de corrida ou é, de outro modo, idempotente ... certo?). Esse método também pode funcionar para qualquer outro MTA que copie a sintaxe direta do Sendmail, supondo que você pode obter o MTA para redirecionar todos os emails para um usuário específico.

Isso pressupõe que mailertable support está habilitado, confFORWARD_PATH está definido, que o Sendmail está autorizado a executar o código (consulte smrsh(8) , mas alguns fornecedores podem alterar o diretório sem atualizar a documentação (executando strings /the/path/to/smrsh | fgrep / may ajuda)) e que algo como o selinux também não está quebrando as coisas.

Outra opção para o Sendmail é usar um MILTER como o MIMEDefang e executar qualquer lógica comercial necessária. (Vários outros MTA suportam MILTER, ou têm algo parecido.)

Daemon do protocolo de transferência de mensagens simples (OpenBSD)

De uma olhada em smtpd.conf(5) (atualizado para alterações no OpenBSD 6.4)

action "mymda" mda "/path/to/your/command" user jdoe
match from any for domain example.com action "mymda"
    
por 21.11.2017 / 19:46
3

Essa pareceu uma pergunta bastante comum ... Eu achei que isso já respondia, o que eu sugeriria. O Procmail é um agente de entrega local .. o que eu acho significa que algo já recebeu o e-mail da rede e o entregou ao procmail para entrega local ou outra filtragem. Neste caso, o postfix seria essa coisa. Tendo executado o postfix na produção, é uma ferramenta sólida e muito flexível para o tratamento de mensagens personalizadas.

link

    
por 21.11.2017 / 15:58