A volte un server di posta può essere di grande utilità se sappiamo come gestirlo correttamente. Nell'articolo di oggi vedremo come usare la nostra MTA per eseguire automaticamente le azioni quando si riceve una e-mail specifico o definire i parametri. Una volta che sappiamo la teoria alzerà due degli esempi pratici.
Per iniziare abbiamo bisogno di un server Linux con Qmail come MTA . Credo che qualsiasi altro server di posta ( Sendmail , Postfix ), mi personalizzare in Qmail , perché è quella che conosco e utilizzo, ma sono sicuro che gli altri possono fare lo stesso.
Teoria
Per capire come l'idea che dobbiamo prima capire come qmail esegue il recapito dei messaggi alle cassette postali locali. Si tratta di un argomento sul quale vi è una notevole letteratura ricerca di Google, ma può non essere chiaro a una lettura veloce. E 'il famoso pasticcio di file . qmail .
Ogni volta che si crea un utente del sistema deve essere creato, se si ricevono messaggi di posta elettronica, un file. Qmail-default nella vostra home directory.
- # cat /home/jiglesias/.qmail-default [Jiglesias @ Lérez ~] # cat / home / jiglesias /. Qmail-default
- . / Maildir /
Normalmente questo file viene creato automaticamente perché quando si installa qmail avrà creato una copia di questo file nella creazione dell'utente scheletro / etc / skel
- # ls -la /etc/skel [Jiglesias @ Lérez ~] # ls-la / etc / skel
- Totale 56
- Jul 29 18 : 29 . drwxr-xr-x 4 root root 4096 29 luglio 18: 29.
- Dec 30 04 : 08 .. drwxr-xr-x 97 root root 12288 30 dicembre aprile: 08 ..
- Feb 1 2008 .bash_logout -Rw-r-r-1 root root 33 1 febbraio 2008. Bash_logout
- Feb 1 2008 .bash_profile -Rw-r-r-1 root root 176 1 FEBBRAIO 2008. Bash_profile
- Feb 1 2008 .bashrc -Rw-r-r-1 root root 124 1 FEBBRAIO 2008. Bashrc
- Aug 29 2007 Maildir drwx - 5 root root 4096 29 ago 2007 Maildir
- Jan 2 2008 .qmail-default -Rw-r-r-1 root root 12 gennaio febbraio 2008. Qmail-default
- Sep 12 2006 .zshrc -Rw-r-r-1 root root 658 12 set 2006. Zshrc
Per chi non lo sapesse, lo scheletro sono i file che vengono copiati nella directory utente (con i permessi di esso) ogni volta che si crea una nuova. Se si desidera che tutti gli utenti in un file automaticamente, questo è il vostro posto. Nel nostro caso vediamo che oltre a directory Maildir. Qmail-default è la consegna della posta predefinito in qmail. Dato un utente il file e questa directory, è possibile ricevere la posta.
Va bene va bene, si sta andando troppo veloce. Tu non hai spiegato per servire. Qmail-predefinito. Giusto. Le regole. Qmail indicano consegna dei messaggi in base a due parametri:
- Il nome del file. Qmail-xx si riferisce al account di posta elettronica su cui agisce.
- Il contenuto indica cosa fare con la posta.
Supponiamo che un utente (jiglesias) che riceve la posta da due account diversi (jiglesias @ ... e osus @ ...).
Di default tutta la posta andrà alla casella e si indica il file. Qmail-default. Ora che il comportamento è diverso a seconda del conto a cui si rivolge, quindi i file creati Qmail per le direzioni.:
- . Qmail-jiglesias: controllare la posta per essere jiglesias @ ...
- . Qmail-osus: controllare la posta per essere osus @ ...
Possiamo anche andare un po 'oltre con un. Qmail-jiglesias-default, e sarebbe controllare la posta che va a qualsiasi tipo di sterzo jiglesias-XXXX @ ..., che è, qualsiasi indirizzo che inizia con jiglesias-sarà controllata da questo file. qmail.
Nello scenario di base, che è quello che abbiamo visto, la consegna viene effettuata alla casella di posta dell'utente (directory Maildir) ma abbiamo potuto fare altre cose a seconda del contenuto del file Qmail responsabile del trattamento di recapito della posta.:
Inoltro ad un altro account:
- # cat /home/jiglesias/.qmail-jiglesias [Jiglesias @ Lérez ~] # cat / home / jiglesias /. Qmail-jiglesias
- reenvio@osusnet.com
L'ora di un programma / script:
- # cat /home/jiglesias/.qmail-osus [Jiglesias @ Lérez ~] # cat / home / jiglesias /. Qmail-osus
- | Preline / usr / bin / programma
Combinazione di quanto sopra
- # cat /home/jiglesias/.qmail-jiglesias [Jiglesias @ Lérez ~] # cat / home / jiglesias /. Qmail-jiglesias
- . / Maildir /
- reenvio@osusnet.com
- | Preline / usr / bin / programma
Il caso in questione è la seconda, cioè la consegna della posta a passare ad uno script che analizza la posta elettronica e prendere decisioni.
Sarete colpiti dalla | preline . file di qmail. E 'il sistema che prepara una e-mail per essere elaborati e consegnati a un altro script aggiungendo alcune intestazioni. L'output dello script che riceve l'e-mail è importante in quanto influenza l'esito della consegna finale di posta elettronica, in particolare, è importante sapere che se rifiutiamo una mail dovrà terminare lo script con exit (100), ciò indica un qmail deve respingere tale messaggio. Staremo a vedere l'utilità di questa uscita.
Pratica
Una volta che sappiamo come passare il controllo di una mail ricevuta da uno script, vediamo come trattarla. Che cosa dobbiamo fare con uno script PHP . . Nel nostro Archivio Qmail fare qualcosa di simile:
- # more .qmail-jiglesias [Jiglesias @ Lérez ~] # più. Qmail-jiglesias
- | Preline / usr / bin / php / home / jiglesias / test.php
Con questo abbiamo completato il lavoro sul server di posta. Vediamo come analizzare l'e-mail da PHP.
La prima cosa da fare è prendere il contenuto della e-mail da script attraverso lo standard input, quindi siamo in grado di elaborare la posta elettronica come una stringa di testo.
- <? Php
- ?>
Con queste semplici due righe di codice nel nostro script abbiamo la posta elettronica contenuti. Ora trattiamo solo. Possiamo farlo riga per riga da soli o affidarsi a qualsiasi libreria. Io uso Mail_mimeDecode di Pera . Il vantaggio di questa biblioteca è che possiamo ottenere, oltre al testo della mail, allegati.
- <? Php
- 'include_bodies' ] = true ; $ Params ['include_bodies'] = true;
- 'decode_bodies' ] = true ; $ Params ['decode_bodies'] = true;
- 'decode_headers' ] = true ; $ Params ['decode_headers'] = true;
- 'input' ] = $email ; $ Params ['input'] = $ email;
- ( $params ) ; $ Struttura = Mail_mimeDecode :: decode ($ params);
- ( trim ( $structure -> headers [ 'from' ] ) ) ; $ From = addslashes ( assetto ($ struttura -> header ['da']));
- [ 1 ] ; $ Nome = $ p [1];
- ?>
Così possiamo ora elaborare la mail e decidere come riteniamo opportuno. Ci inseriamo in un database, lanciare altri processi automatici, inviare avvisi SMS ... che cosa viene in mente.
Casi di studio
La domanda chiave, dopo aver visto la teoria, perché dovrei usare questo?. Propongo due applicazioni che ho fatto.
Sistema di supporto
Il sistema di ticket di supporto tipico. Nel soggetto mail trascinando l'identificatore del biglietto, ad esempio, [# 123445]. Dovremo discutere la questione e vedere se compare modello predefinito. Se ci sono di fronte a un nuovo biglietto e inserire i dati nel nostro database, altrimenti è una risposta a un precedente incidente e che avremo l'identificatore. Semplice no?. Possiamo anche allegare ai nostri file indicendias che possono essere raggiunti via e-mail.
Invio di file dal cellulare
Il secondo esempio è simile al precedente ma tecnicamente concettualmente distinte. La maggior parte dei telefoni (tranne la fascia alta) non è possibile inviare file da forme wap (<origine type="file">). L'alternativa è che l'utente invia una e-mail o MMS (la maggior parte degli operatori permettono di inviare a indirizzi e-mail) con i file. Il nostro script dovrà elaborare i contenuti della posta elettronica ricevuti, decodificare file e trattati in modo appropriato.
Si tratta di due semplici esempi di come utilizzare la posta elettronica per automatizzare le attività, ma, come ho detto, potremmo fare tutto ciò che si può pensare, di inviare un avviso SMS a nemmeno riavviare il nostro server o lanciare qualsiasi altro incarico.













