GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire uno script quando arriva una posta nel server di posta? (Debian)

Sembra che qualcun altro abbia già risposto, ma ho pensato di scrivere una risposta specifica per te.

Userei procmail e userei una ricetta nel tuo .procmailrc simile a questa:

#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

Avrai anche bisogno di una ricetta predefinita in fondo per indirizzare la posta nella tua maildir.


È possibile utilizzare /etc/aliases per reindirizzare la posta elettronica direttamente a un programma da elaborare, quindi se si desidera eseguire uno script per elaborare tutta la posta a [email protected], inserire questa riga in /etc/aliases (funziona per postfix, sendmail, ecc.):

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

Quindi eseguire "newaliases" per aggiornare il database.

Quindi assicurati di avere un programma funzionante in /usr/local/bin chiamato processtestemail.php.

Può essere scritto in php, bash, perl, python, qualunque cosa tu voglia e qualunque cosa tu abbia per un interprete. Potresti persino lanciare un binario compilato scritto in c/c++, ecc.

Ci sono stati suggerimenti per l'utilizzo di procmail sopra, è un ottimo prodotto, ma onestamente quella che ho presentato è la soluzione più veloce e semplice e funziona in più versioni di *NIX con più programmi di posta rispetto a qualsiasi altra.

Inoltre, nessuna delle altre risposte ti dice davvero come elaborare il messaggio in entrata e quindi, nel tuo script, leggi l'input dallo standard "in" (stdin) e poi analizzi quei dati usando qualsiasi algoritmo potresti dover elaborare correttamente come segue:

<?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.
*/

?>

ThanksSA Experts for Hire:facciamo tutto in grande o in piccolo tekops.com


Ecco un buon howto sull'elaborazione della posta in arrivo. La cosa più semplice da fare è usare il .forward meccanismo come descritto, per convogliare un messaggio attraverso uno script. Crea un file mode 600 .forward nella home directory dell'utente e inserisci una pipe in uno script al suo interno:

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

Tuttavia, dovresti considerare l'uso di procmail invece, come spiegano i dettagli dell'howto. Procmail ti offre molti vantaggi, come la registrazione e l'elaborazione della posta più sofisticate. Ecco un semplice esempio di .procmailrc (di nuovo dallo stesso howto):

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

che ha alcune caratteristiche interessanti, come la capacità di rilevare e fermare i loop di posta.


Linux
  1. Debian:come eseguire programmi a 32 bit su una Debian/ubuntu a 64 bit?

  2. Come eseguire "find -exec {};?

  3. Come eseguire uno script??

  4. Come installare Localizza su un Debian Cloud Server

  5. Come faccio a far funzionare in background il mio server web Golang?

Come eseguire uno script Python in PHP

Come eseguire uno script Bash

Come installare Nginx in Debian 7

Come installare Apache su Debian 7

Come installare Apache su Debian 8.2

Come aggiungere un IP privato a un server Debian