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
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"