Como executar um script quando um email chega no servidor de email? (Debian)

5

Eu quero analisar e inserir algumas informações do email que acabou de chegar em um servidor de email do aplicativo de missão crítica.

Existe alguma maneira de configurar meu servidor de e-mail para que ele execute um script quando o e-mail chegar.

Embora eu tenha um sistema debian, qualquer solução genérica (Linux) serve.

    
por Rahul Prasad 19.04.2011 / 09:37

4 respostas

7

Parece que outra pessoa já respondeu isso, mas achei que eu daria uma resposta específica para você.

Eu usaria o procmail e usaria uma receita no seu .procmailrc similar a esta:

#turn this off when you're finished testing :)
VERBOSE=on
LOGFILE=/home/user/procmail.log

:0 c #the c means continue on after this recipe is parsed
| /path/to/your/script

Você também precisará de uma receita padrão na parte inferior para direcionar a correspondência para sua maildir.

    
por 19.04.2011 / 09:53
2

Este é um bom tutorial sobre o processamento de mensagens recebidas . A coisa mais simples a fazer é usar o mecanismo .forward , conforme descrito, para enviar uma mensagem por meio de um script. Crie um arquivo do modo 600.forward no diretório inicial do usuário e coloque um canal em um script:

"|$HOME/bin/your.program -and some arguments" 

No entanto, você deve procurar usar o procmail em vez disso, como detalhes. O Procmail oferece muitas vantagens, como log mais sofisticado e processamento de mensagens. Aqui está um exemplo simples de .procmailrc (novamente a partir do mesmo howto):

:0
* !^FROM_DAEMON
* !^FROM_MAILER
* !^X-Loop: [email protected]
| $HOME/bin/my.script 

que tem alguns recursos interessantes, como a capacidade de detectar e parar loops de e-mail.

    
por 19.04.2011 / 09:53
1

Você pode usar / etc / aliases para encaminhar o email diretamente para um programa a ser processado, portanto, se você quiser executar um script para processar todos os emails para [email protected], coloque essa linha em / etc / aliases (funciona para postfix, sendmail, etc.):

test:              "|/usr/local/bin/processtestemail.php"

Em seguida, execute "newaliases" para atualizar o banco de dados.

Depois, verifique se você tem um programa em funcionamento em / usr / local / bin chamado processtestemail.php.

Ele pode ser escrito em php, bash, perl, python, o que você quiser e o que você tiver para um interpeter. Você pode até mesmo lançar um binário compilado escrito em c / c ++, etc.

Houve sugestões para usar o procmail acima, é um ótimo produto, mas honestamente o que eu apresentei é a solução mais rápida e simples e funciona em mais versões do * NIX com mais mailers do que qualquer outro.

Demasiado, nenhuma das outras respostas lhe diz realmente como processar a mensagem de entrada e, por isso, no seu script lê a entrada do padrão "in" (stdin) e depois analisa esses dados utilizando quaisquer algoritmos que possa ter para processar corretamente da seguinte forma:

<?php

$fd = fopen('php://stdin','r');
if ($fd) then
    {
    $email = '';                         // initialize buffer
    while (!feof ($fd))                  // read as long as message
        {
        $rawemail .= fread($fd,1024);    // read up to 1K at a time
        ProcessTheMessageChunk($rawEmail);
        }
    fclose($fd);                         // done so close file handle
    $fd=NULL;                            // clear file handle
    }
else
    {
    print("ERROR:  Could could open stdin...");
    };

/* 
** Now write your code to fill in the function ProcessMessageChunk()
** and then process the data you have collected altogether using
** that function/subroutine.
*/

?>

Obrigado SA Experts for Hire: fazemos tudo grande ou pequeno tekops.com

    
por 13.12.2017 / 00:41
0

No postfix, você pode manter todas as mensagens recebidas (que correspondam a algum padrão, ou simplesmente todas elas), fazer com que seu aplicativo as pegue no diretório hold / e colocá-las de volta no diretório / incoming assim que estiver pronto. É assim que o filtro antispam MailScanner funciona quando usado com o postfix.


No arquivo de configuração Postfix /etc/postfix/main.cf, adicione esta linha:
header_checks = regexp: / etc / postfix / header_checks
No arquivo / etc / postfix / header_checks adicione esta linha:
/ ^ Recebido: / HOLD

O efeito disso é dizer ao Postfix para mover todas as mensagens para a fila HOLD, quando a sua aplicação estiver pronta, eu acredito que você deve colocar as mensagens na entrada / diretório.

    
por 19.04.2011 / 09:51