Aggiungere l'autoreply, autoforward e spam ad Horde/Imp


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Login/Register

Horde/Imp e' (o dovrei dire sono?) una applicazione di WebMail, in pratica un comodo modo per accedere alla vostra posta elettronica tramite il web.

Sviluppato in PHP, consente di gestire molteplici server di posta mediante IMAP o POP, molteplici directory (folder), ed e' dotato di una pletora di moduli aggiuntivi per avere calendari condivisi, indirizzari, annotazioni e chi piu' ne ha piu' ne metta.

Se vi interessa lo trovate su http://www.horde.org.

Un po' di tempo fa i miei utenti hanno cominciato a lamentarsi per la necessita' di crearsi messaggi di 'out-of-office', rispedire messaggi da un'account ad un'altro e la possibilita' di regolare il proprio filtro antispam via Web.

Ergo: mi sono messo a guardare come aggiungere tali funzionalita' ad Horde.

Il sistema piu' semplice di creare un'autoforward e' quello di creare un file chiamato .forward nella home dir dell'utente contenente l'indirizzo di posta a cui forwardare la mail.

Ok, QMail di default non guarda il file .forward se non glielo si dice esplicitamente, per questo e' necessario un file .qmail, ma questi sono dettagli.

Per l'autoreply in genere si usa uno scriptino di procmail che invia una mail automaticamente al mittente della mail teste' ricevuta con un testo standard.

Per il controllo di spam di solito, sempre tramite il poliedrico procmail, si richiama un programma di scansione che provvede a 'marcare' la mail se positiva, oppure si usa un programma esterno che 'marchi' la mail se il programma di scansione ne segnala la necessita'.

In sostanza quindi si tratta di scrivere un paio di filettini nella home dir dell'utente. Tutto qui.

Facile no?

Come no, avendo la possibilita' di scrivere nella home dir dell'utente!. Il guaio e' che un server di posta di solito NON CONSENTE di scrivere da nessuna parte. Non tramite il server stesso.

Pensa che ti ripensa, ho deciso che vi sono due strade possibili. La prima consiste nell'implementare SIEVE, che e' un'estensione (chiamiamola cosi) dell'SMTP che consente la creazione di script direttamente dal mail server. Il grosso problema e' che non tutti i mail server lo supportano ed includerne il supporto non e' proprio un giochetto da ragazzi. Ed io dovevo farlo per 32 server, non per uno solo.

L'alternativa consiste nel creare lo script di procmail sulla macchina su cui "gira" il webmail e poi fare un bell'upload usando FTP sul mailserver.

Ora, ammetto che usare l'ftp non e' che sia una grande idea, anzi e' abbastanza fetente, ma dato che cio' che e' richiesto e' il solo FTP dal web server verso il mail server e che molto spesso tali server sono sulla stessa macchina o nella stessa LAN, l'ho reputato un sistema abbastanza sicuro da provarci.

nota: se volete implementare un sistema di sftp fate pure.

Per la creazione dell'autoreply ho deciso di fare le cose un pelo sofisticate e creare una cache di gente che ha gia' ricevuto l'autoreply, in modo da inviare UN SOLO autoreply per ciascuno e non un'autoreply ad ogni mail.

Lo scriptino procmail da creare e' il seguente:


:0 Whc: /home/USERNAME/.vacation.lock
* !^FROM_DAEMON
* !^X-Loop: USERNAME@SERVER
* !^Precedence: bulk
| FORMAIL -rD 8192 /home/USERNAME/.vacation.cache

:0 ehc
| (FORMAIL -rA"Precedence: junk" -A"X-Loop: USERNAME@SERVER" ; \
     cat /home/USERNAME/.vacation.text) | SENDMAIL -oi -t

Questo script e' composto da due parti, la prima parte aggiunge l'indirizzo del mittente alla 'cache', la seconda costruisce la mail di risposta leggendo il testo da un file chiamato ".vacation.text" ed invia la mail richiamando SENDMAIL.

In entrambi i "blocchi" USERNAME deve essere sostituito con il nome dell'utente, SERVER con il server di posta, SENDMAIL con il path completo del programma usato per inviare la posta (sendmail di solito) e FORMAIL con il path completo di formail, che e' usato per 'costruire' la mail di risposta.

Quindi si tratta di scrivere un codicillo che 'componga' questo script mettendo al posto giusto i parametri giusti, scriva il file contenente il testo di risposta e faccia l'upload di entrambi sul server di posta.

Questa qui' e' un pelo piu' complicata, ma in sostanza e' la stessa cosa di un'autoreply, si tratta solo di inviare la mail al programma di controllo ed eventualmente richiamare un programmino di "marcamento" delle email.

Lo script procmail e' il seguente:


:0fw
| SPAMASSASSIN

:0
* ^X-Spam: yes;
| /usr/local/sbin/mark.pl

Nel mio caso utilizzo spamassassin per filtrare la posta, il programmello 'mark.pl' e' una semplice utility che marca la posta se contiene il flag di spam.

Perche' "mark.pl" ? Perche' non sempre la configurazione di spamassassin fa' il tag automatico della mail (riscrittura del subject), quindi ho deciso di forzare la cosa.

Come gia' detto, horde/imp e' costituito da una pletora di moduli che fanno di tutto... ed aggiungerne uno e', in genere, questione di copiare i file nella directory di horde e fine.

Purtroppo pero', ho scoperto sulla mia pellaccia che se quello che si vuole fare e' semplicemente AGGIUNGERE UNA FUNZIONE ad un modulo gia' esistente, le cose non sono cosi' semplici.

Quello che ho fatto pertanto e' il seguente: mi sono preso una funzione che gia' c'era e funzionava, ho guardato come era fatta e poi ho scritto la mia funzione sulla falsariga di quella gia' presente.

Il grosso guaio l'ho avuto nel ricercare dove Horde/Imp salva certi importanti parametri... come il nome utente, il server di posta e la password. Queste informazioni sono necessarie se vogliamo uploadare un file sul server. Ho scoperto cosi' che Horde salva la password dell'utente in formato criptato anche in memoria. Peccato che decriptare la password sia una faccenda di un secondo (effettivamente, quale e' il vantaggio a questo punto?).

Dopo un po' (un bel po') di ravanamenti, sono riuscito a fare quello che volevo: mettere insieme l'interfaccia che crei il file e faccia l'upload sul server in automatico. Ovviamente per l'upload e' necessario che PHP sia compilato con il supporto di FTP. Altrimenti non funziona.

L'intero codice e' diviso in due pezzi: spam.php e' il programma vero e proprio che viene richiamato, questo usa il "template" in template/spam/main.inc per visualizzare la propria interfaccia. Effettivamente e' un po' eccessivo l'uso del template, ma ho voluto mantenere la stessa struttura del resto dei moduli.

Una volta eseguito l'update, spam.php crea un file temporaneo in /tmp per scriverci dentro l'intero procmail e poi effettua l'upload sul server leggendo server, username e password dalla sessione attuale.

Per mantenere lo 'stato' attuale delle cose (autoreply attivato o meno, spam attivato o meno et similia), scrivo 3 file di supporto nella home dir, tali file hanno nomi come ".ooo" (Out Of Office) e contengono solamente "enabled" o "disabled" a seconda dello stato. Ho deciso di non usare un sistema piu' sofisticato (MySQL o LDAP) perche' non ero sicuro se tale sistema fosse disponibile sulla macchina di destinazione.

Per ottenere i messaggi "in lingua" e' necessario aggiungere i messaggi al supporto di lingua, tali messaggi sono letti dai file (binari) in horde/imp/locale/. Ho scoperto subito che per creare tali file e' necessaria la suite di utility gettext. Al momento attuale ho creto i messaggi per inglese, italiano e spagnolo.

Per "collegare" il mio pezzo di codice al resto di horde/imp ci sono due modi, il primo e' quello di aggiungere una voce al modulo "Impostazioni". Ma questo modulo potrebbe non essere attivo, in quanto lo e' solo se si decide di installare un supporto per le impostazioni utente (MySQL o LDAP). L'alternativa e' quella di aggiungere una icona al menu' standard di IMP.

Per aggiungere una voce al menu' e' sufficiente modificare il file horde/imp/templates/menu/menu.inc, richiamando l'apposita API di Horde per creare la entry con l'icona e tutto il resto, per aggiungere la voce al menu' impostazion invece si tratta di modificare il file di configurazione horde/imp/config/prefs.php aggiungendo un "blocco" che descrive il programma da richiamare, la descrizione etc.

L'intero modulo e' reperibile qui.

Per l'installazione dell'accrocchio ho deciso di creare un vero e proprio programmino di installazione.

Lo script controlla la presenza di php, dei programmi di supporto e di tutto l'ambiente ed apporta le necessarie modifiche ai files di configurazione e di messaggi. Questo significa anche che l'installazione si aspetta di avere SULLA STESSA MACCHINA horde ed il server di posta, se questo non e' vero (il web server ed il mail server sono diversi), occorre modificare lo script valorizzando i parametri di SENDMAIL, FORMAIL etc. ed impostando il path assoluto di tali programmi.

In sostanza e' sufficiente eseguire lo script per trasformare una installazione "liscia" di horde in una installazione con modulo aggiuntivo.

Ovviamente, io ho provato il tutto su un paio di sistemi, percio' se non funziona sul vostro armatevi di pazienza e verificate il tutto.

Non esiste una de-installazione, quindi armatevi di backup prima di cominciare.


I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

Nessun messaggio this document does not accept new posts

Precedente Successivo

Davide Bianchi, lavora come Unix/Linux System Administrator presso una societa' di "sicurezza informatica" (aka: $networkgestapo) di Haarlem. Contatti: mail: davide AT onlyforfun.net , Jabber: davideyeahsure AT gmail.com,

Volete contribuire? Leggete come!.
 
 

Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gort