Make About Copertina VFS |
Articoli
Costruire una mailing list con sendmail e interfacciarla al Web con MHonArc
Ma supponiamo anche che dopo 55 minuti voi andiate dal capo, fieri e orgogliosi del vostro lavoro, e gli diciate: "Fatto capo! Ho attivato le mailing list sysadmin, dattilografi, impiegati e segretarie, come mi aveva chiesto", e che il vostro capo vi risponda "Bravo Fantozzi, bel lavoro! Visto che è così bravo riuscirà sicuramente ad approntare una interfaccia Web delle liste entro domani sera, vero!?". Se a questo punto pensate che la vostra sorte sia segnata non preoccupatevi, faremo in modo che non siate licenziati, almeno per ora!
Scherzi a parte, questo articolo è il resoconto di una esperienza diretta, fatta sul server del GULCh. La necessità di attivare con urgenza tutti i servizi essenziali, come la mailing list e la sua interfaccia web, ci ha imposto di partire da una configurazione di emergenza, da affinare strada facendo. E in attesa di installare Majordomo ed imparare ad usarlo abbiamo sfruttato il sendmail standard di Linux. Per l'interfacciamento al Web abbiamo cominciato con Hypermail, che ben presto si è rivelato completamente inaffidabile. Siamo quindi passati a MHonArc, del quale al momento siamo abbastanza soddisfatti. Vedremo quindi come configurare sendmail per costruire delle semplici mailing list e come utilizzare MHonArc per creare archivi HTML, ordinati per thread e per data, dei messaggi che transitano per la lista.
Lo strumento degli alias è però molto più potente! Infatti un alias può essere definito anche per persone che non hanno un account sulla macchina, può reindirizzare la posta a più di una persona, passarla in input a dei comandi, permette la ricorsione... Le possibilità sono veramente tante.
Qualunque distribuzione di Linux abbiate installato, se il vostro "gestore" della posta elettronica è sendmail avrete sicuramente un file chiamato /etc/aliases. In questo file vanno riportati gli alias di posta elettronica.
La cosa più semplice e rapida è inserire in /etc/aliases una riga per ogni indirizzo fittizio, con a fianco il/gli indirizzi a cui effettivamente mandare il messaggio. Un possibile file per gulch.unica.it è il seguente:
mmarongiu: bronto gconcas: judas ssanna: gerda rcongiu: congiu, congiu@csp.it sysadmin: bronto,gerda,rcongiu,judas
Le prime tre linee sono strutturalmente identiche: informano sendmail che se riceve posta per l'"utente" scritto alla sinistra dei due punti deve recapitare il messaggio all'indirizzo scritto alla destra.
La quarta riga è simile: anziché un solo indirizzo ne sono stati inseriti due, separati da una virgola e da un carattere spazio: sugli indirizzi multipli torneremo fra poco.
L'ultima riga presenta una novità in più: oltre a indirizzi "reali" (bronto, gerda, judas) ne compare uno fittizio (rcongiu, definito una riga più sopra): anche in questo caso sendmail, cercando di risolvere l'indirizzo "rcongiu", arriverà a risolvere l'alias e spedirà quindi all'indirizzo giusto (3).
Con l'ultima riga arriviamo finalmente al dunque: essa infatti si configura come una mailing list, alla quale sono iscritte quattro persone. Per creare una mailing list possiamo accontentarci di sapere questo: basta scrivere il nome della lista, seguito da un segno di due punti ":" e da tutti gli indirizzi che ne fanno parte, separati da virgole. Per andare a capo è sufficiente terminare una riga con il separatore degli indirizzi, la virgola, e poi proseguire sulla riga successiva. Per una questione di ordine può essere conveniente indentare con spazi; sendmail li ignorerà andando dritto all'indirizzo.
C'è anche una piccola trappola, per la quale dovete ringraziare i programmatori di elm. Con elm si possono definire sia alias personali per ogni utente sia alias di sistema, che però vengono sfruttati solo da elm. Il comando per rendere attivi questi alias si chiama newalias, e la sintassi stessa del file degli alias è simile, ma non uguale, a quella di /etc/aliases. Fate quindi attenzione a non confondervi, o rischierete di perdere le giornate a capire perché, malgrado la sintassi in /etc/aliases sia esatta, gli alias non vengano caricati correttamente.
Che cos'è MHonArc? Leggiamo uno stralcio della documentazione:
MHonArc è un programma in Perl per convertire messaggi di posta elettronica soggetti alla RFC 822 ed allo standard MIME in HTML. MHonArc può assolvere ai compiti seguenti:Una copia di MHonArc potete prelevarla direttamente presso gulch.unica.it, all'URL http://gulch.unica.it/~bronto/ft/MHonArc2.0b3.tar.gz, o presso il sito ufficiale all'URL http://www.oac.uci.edu/indiv/ehood/mhonarc.html.Oltre a ciò MHonArc possiede anche:
- Convertire folder MH o mailbox UUCP/Unix in un archivio di e-mail in HTML.
- Aggiungere o rimuovere messaggi ad un archivio di e-mail in HTML generato da MHonArc
- Convertire un messaggio singolo in HTML.
Ecco alcune ragioni per usare MHonArc:
- Un indice principale dei messaggi archiviati configurabile
- Un indice per thread, anch'esso configurabile
- La possibilità di controllare la formattazione dei messaggi
- La possibilità di definire propri filtri per i messaggi
- Vuoi avere archivi ordinati di messaggi di posta elettronica e/o di articoli di news per un server WWW, con collegamenti ipertestuali agli autori e ad ogni URL citato;
- Vorresti gestire il layout degli archivi in modo che sia consistente con il resto del sito;
- Hai dei messaggi MIME che vorresti includere nei tuoi archivi;
- Hai un client WWW ma non un client e-mail compatibile MIME. MHonArc ti permetterà di leggere messaggi MIME che includono immagini, audio, video etc. tramite il tuo browser Web;
- Supporto multipiattaforma: Unix e DOS/Windows (MacOS?);
- Pensi che il logo di MHonArc sia troppo figo, e che meriti di essere usato;
- Ti piace il Perl, e vuoi vedere cosa riesce a fare;
- Hai bisogno di una utility per archiviare messaggi e-mail che funzioni anche con Perl 4;
Per l'installazione è sufficiente decomprimere l'archivio in una directory provvisoria e poi seguire le istruzioni contenute nel file README:
Installazione interattiva:
Eseguire il comando seguente:perl install.me
Il programma di installazione vi farà una serie di domande su dove si trova l'eseguibile perl e dove copiare i file di MHonArc. Premete semplicemente <INVIO> per accettare i valori di default che vengono mostrati fra parentesi tonde.
Da quanto detto poco sopra avrete sicuramente intuito che la lista gulch@gulch.unica.it altro non è che un grande alias di sendmail. Oltre ai vari indirizzi degli utenti l'alias presenta in più qualcosa che ancora non abbiamo visto:
gulch: bronto@tex.unica.it, gerda, gundam, robin, congiu@csp.it, judas, ermini@vaxca3.unica.it, agemo@iol.it, gppe@tex.unica.it, [eccetera eccetera] mirko@sol.dada.it, "| /usr/local/mhonarc/bin/mhonarc -add -outdir /var/lib/httpd/htdocs/mailing-list -rcfile /var/lib/httpd/conf/mhonarc.conf"
Notate che l'ultima riga contiene una pipeline, racchiusa fra doppi apici. Questa fa in modo che all'arrivo di un messaggio all'indirizzo gulch questo venga spedito a tutti gli indirizzi specificati, e in più venga inviato anche sullo standard input del programma specificato. Nel nostro caso i messaggi vengono inviati allo standard input di /usr/local/mhonarc/bin/mhonarc(5).
<!-- commento -->
.
Una spiegazione dettagliata su come preparare questo file esula dagli scopi di
questo articolo, in quanto si ridurrebbe ad una pura e semplice traduzione del
manuale d'uso. A titolo di esempio riporto il file che configura il layout
della lista gulch, che contiene commenti esplicativi delle
direttive. Per una spiegazione dettagliata vi rimando alla
documentazione o, ancora una
volta, al
sito ufficiale.
La versione da noi utilizzata è la 2.0.0 Beta 3, che ha ancora qualche piccolo bug; ad esempio la conversione dei nomi dei mesi in italiano non ha dato i risultati sperati, ma siamo fiduciosi nella nuova versione!
<!-- PERSONALIZZAZIONE DELL'INDICE PRINCIPALE PER LA MAILING LIST DEL GULCH GULCh - Gruppo Utenti Linux Cagliari. WWW: http://gulch.unica.it/ MARCO MARONGIU - 19 MARZO 1997 email: mmarongiu@gulch.unica.it WWW: http://tex.unica.it/~bronto --> <!-- CONFIGURAZIONE GENERALE ********************************* --> <!-- NOME DEL FILE INDICE THREADED --> <TIdxFName> index.html </TIdxFName> <!-- MODALITA' DI ORDINAMENTO DEI MESSAGGI NELL'INDICE GENERALE --> <SORT> <!-- GIORNI DELLA SETTIMANA E MESI --> <!-- NOMI COMPLETI --> <WeekDays> Domenica:Lunedi:Martedi:Mercoledi:Giovedi:Venerdi:Sabato </WeekDays> <Months> Gennaio:Febbraio:Marzo:Aprile:Maggio:Giugno:Luglio:Agosto:Settembre:Ottobre:Novembre:Dicembre </Months> <!-- NOMI ABBREVIATI --> <WeekDaysAbr> Dom:Lun:Mar:Mer:Gio:Ven:Sab </WeekDaysAbr> <MonthsAbr> Gen:Feb:Mar:Apr:Mag:Giu:Lug:Ago:Set:Ott:Nov:Dic </MonthsAbr> <!-- FORMATO DELLE DATE --> <GMTDateFmt> %a %d %b %Y - %H:%M:%S </GMTDateFmt> <LocalDateFmt> %A %d %B %Y - %H:%M:%S </LocalDateFmt> <!-- FINE CONFIGURAZIONE GENERALE ********************************* --> <!-- HEADER DELL'INDICE PER DATA --> <IdxPgBegin> <html> <head> <title>Mailing list del GULCh</title> <meta http-equiv="Refresh" content="600"> </head> <body background="http://gulch.unica.it/56.jpg"> <table width=100% cellpadding=10> <tr BGCOLOR="#FFD700"><td align=left><br><h1><font size=7 color="#CC3232" face="Arial, Helv, Helvetica"><b>Mailing List del GULCh</b></font></h1> </table> </IdxPgBegin> <!-- MODALITA' MULTIPAGINA; IL NUMERO DI MESSAGGI PER PAGINA E' FISSATO DAL VALORE COMPRESO NEL CAMPO IDXSIZE --> <MultiPg> <IdxSize> 50 </IdxSize> <!-- AGGIUNGE IL LINK ALLA DOCUMENTAZIONE DI MHonArc; IL URL E' LOCALE ED E' SPECIFICATO ALL'INTERNO DEL CAMPO DOCURL --> <Doc> <DocURL> http://gulch.unica.it/~mhonarc/doc/ </DocURL> <!-- FOOTER DELL'INDICE PER DATA --> <IdxPgEnd> <hr size=0> <table width=100% cellpadding=10> <tr BGCOLOR="#FFD700"><td align=right><font size=+1 color="#CC3232"><i>Torna alla<br> <a href="http://gulch.unica.it/">GULCh Homepage</a></i></font> </table> <hr size=0> <div align=center><font size=-2><i>Questa pagina viene aggiornata automaticamente ogni <b>10</b> minuti</i></font></div> <hr size=0> </body> </html> </IdxPgEnd> <!-- TAG DI INIZIO DELLA LISTA DEI MESSAGGI --> <!-- HEADER --> <ListBegin> <div align=center><nobr> <hr size=1> $PREVPGLINK$ [<a href="$TIDXFNAME$">Indice per Thread</a>] $NEXTPGLINK$ <p> Ultimo Aggiornamento: $LOCALDATE$<br> $NUMOFMSG$ messaggi <hr size=1> </nobr></div> <ul> </ListBegin> <!-- TEMPLATE PER LE VOCI NELL'ELENCO DEI MESSAGGI --> <LiTemplate> <li>$ICON$ <b>$SUBJECT$</b> <i>$FROMNAME$, $DDMMYY$</i> </LiTemplate> <!-- HEADER DELL'INDICE PER THREAD --> <TIdxPgBegin> <html> <head> <title>Mailing list del GULCh - Indice Thread</title> <meta http-equiv="Refresh" content="600"> </head> <body background="http://gulch.unica.it/56.jpg"> <table width=100% cellpadding=10> <tr BGCOLOR="#FFD700"><td align=left><br><h1><font size=7 color="#CC3232" face="Arial, Helv, Helvetica"><b>Mailing List del GULCh</b> - Indice Thread</font></h1> </table> </TIdxPgBegin> <!-- TAG PER L'INIZIO DELLA LISTA DEI MESSAGGI THREADED --> <THead> <div align=center><nobr> <hr size=1> $TPREVPGLINK$ [<a href="$IDXFNAME$">Indice per Data</a>] $TNEXTPGLINK$ <p> Ultimo Aggiornamento: $LOCALDATE$<br> $NUMOFMSG$ messaggi <hr size=1> </nobr></div> <ul> </THead> <!-- TEMPLATE PER LE VOCI NELLA LISTA DEI MESSAGGI THREADED --> <TLiTxt> <li>$ICON$ <strong>$SUBJECT$</strong><br> <i>$FROMNAME$</i> </TLiTxt> <TLiEnd> </li> </TLiEnd> <!-- TEMPLATE PER I MESSAGGI CHE NON FANNO PARTE DI UN THREAD --> <TSingleTxt> <li>$ICON$ <strong>$SUBJECT$</strong><br> <i>$FROMNAME$</i> </TSingleTxt> <!-- TEMPLATE PER IL MESSAGGIO DI TESTA DI UN THREAD --> <TTopBegin> <li>$ICON$ <strong>$SUBJECT$</strong> <i>$FROMNAME$</i> </TTopBegin> <!-- FOOTER DELL'INDICE PER THREAD --> <TIdxPgEnd> <hr size=0> <table width=100% cellpadding=10> <tr BGCOLOR="#FFD700"><td align=right><font size=+1 color="#CC3232"><i>Torna alla<br> <a href="http://gulch.unica.it/">GULCh Homepage</a></i></font> </table> <hr size=0> <div align=center><font size=-2><i>Questa pagina viene aggiornata automaticamente ogni <b>10</b> minuti</i></font></div> <hr size=0> </body> </html> </TIdxPgEnd> <!-- SEGNALE DI UN MESSAGGIO DEL QUALE SI HA LA RISPOSTA MA NON L'ORIGINALE --> <TLiNone> <LI><EM>(Messaggio non disponibile)</EM> </TLiNone> <!-- SOPPRIME IL MESSAGGIO "POSSIBLE FOLLOW-UP" --> <!-- <TSubjectBeg> </TSubjectBeg> --> <!-- SETUP PER I SINGOLI MESSAGGI --> <!-- CODICE HTML INSERITO IN TESTA AD OGNI MESSAGGIO DI POSTA --> <MsgHead> <div align=right><font size=-2><i>Mailing list del GULCh</i></font></div> <hr size=1 noshade> </MsgHead> <!-- CODICE HTML SUCCESSIVO ALL'HEADER DEI MESSAGGI, CON I PRINCIPALI LINK --> <TopLinks> <div align=center><nobr> $PREVBUTTON$ $NEXTBUTTON$ $TPREVBUTTON$ $TNEXTBUTTON$ </nobr></div> <hr size=1 noshade> <HR> </TopLinks> <!-- CODICE HTML "FOOTER" PER I MESSAGGI, CON I PRINCIPALI LINK --> <BotLinks> <HR> <div align=center><nobr> [<a href="$IDXFNAME$">Indice per Data</a>] [<a href="$TIDXFNAME$">Indice per Thread</a>] <p> $PREVBUTTON$ $NEXTBUTTON$ $TPREVBUTTON$ $TNEXTBUTTON$ </nobr></div> <hr> <div align=right> <a href="http://gulch.unica.it/home.html"><i><small>Torna alla</small><br>GULCh HOME PAGE</i></a> <HR> </BotLinks> <!-- DEFINIZIONE DEI {PREV|NEXT}BUTTON E DEI LORO RISPETTIVI NO-LINK --> <!-- TRAMITE QUESTE DIRETTIVE SI DEFINISCE IL CODICE HTML PER I PULSANTI TESTUALI CHE CONSENTONO DI NAVIGARE NEI MESSAGGI --> <!-- PULSANTE PER IL MESSAGGIO PRECEDENTE PER DATA (QUANDO ESISTE) --> <PrevButton> [<a href="$PREVMSG$">Precedente per data</a>] </PrevButton> <!-- PULSANTE PER IL MESSAGGIO PRECEDENTE PER DATA (QUANDO *NON* ESISTE) --> <PrevButtonIA> [Precedente per data] </PrevButtonIA> <!-- COME SOPRA --> <NextButton> [<a href="$NEXTMSG$">Successivo per data</a>] </NextButton> <NextButtonIA> [Successivo per data] </NextButtonIA> <TPrevButton> [<a href="$TPREVMSG$">Precedente per thread</a>] </TPrevButton> <TPrevButtonIA> [Precedente per thread] </TPrevButtonIA> <TNextButton> [<a href="$TNEXTMSG$">Successivo per thread</a>] </TNextButton> <TNextButtonIA> [Successivo per thread] </TNextButtonIA> <!-- STESSA COSA PER LE PAGINE DEGLI INDICI (RICORDARE CHE ABBIAMO DEFINITO LA MODALITA' MULTIPAGINA: IN OGNI INDICE POSSONO STARE AL MASSIMO 50 MESSAGGI. QUI VENGONO DEFINITI I LINK ALLE PAGINE PRECEDENTI E SUCCESSIVE DEGLI INDICI --> <!-- LE DIRETTIVE CHE INIZIANO PER T SI RIFERISCONO ALL'INDICE PER THREAD, LE ALTRE ALL'INDICE PER DATA --> <PrevPgLink> [<a href="$PREVPG$">Pagina Precedente</a>] </PrevPgLink> <PrevPgLinkIA> [Pagina Precedente] </PrevPgLinkIA> <NextPgLink> [<a href="$NEXTPG$">Pagina Successiva</a>] </NextPgLink> <NextPgLinkIA> [Pagina Successiva] </NextPgLinkIA> <TPrevPgLink> [<a href="$TPREVPG$">Pagina Precedente</a>] </TPrevPgLink> <TPrevPgLinkIA> [Pagina Precedente] </TPrevPgLinkIA> <TNextPgLink> [<a href="$TNEXTPG$">Pagina Successiva</a>] </TNextPgLink> <TNextPgLinkIA> [Pagina Successiva] </TNextPgLinkIA> <!-- SETUP ICONE --> <ICONS> application/octet-stream:http://gulch.unica.it/icons/binary.gif application/postscript:http://gulch.unica.it/icons/postscript.gif audio/basic:http://gulch.unica.it/icons/sound.gif image/gif:http://gulch.unica.it/icons/image1.gif image/jpeg:http://gulch.unica.it/icons/image2.gif image/tiff:http://gulch.unica.it/icons/image3.gif multipart/digest:http://gulch.unica.it/icons/text.gif multipart/mixed:http://gulch.unica.it/icons/generic.gif multipart/parallel:http://gulch.unica.it/icons/generic.gif text/richtext:http://gulch.unica.it/icons/a.gif text/html:http://gulch.unica.it/icons/layout.gif text/plain:http://gulch.unica.it/icons/text.gif unknown:http://gulch.unica.it/icons/unknown.gif video/mpeg:http://gulch.unica.it/icons/movie.gif video/quicktime:http://gulch.unica.it/icons/movie.gif </ICONS>
Distribuzione | user | group |
---|---|---|
Slackware | bin | bin |
Debian | daemon | daemon |
Red Hat |
Uno degli svantaggi nell'usare questo sistema è senz'altro l'assenza di qualunque automatismo: per aggiornare la lista il system manager dovrà necessariamente editare /etc/aliases a mano e gestire di persona le richieste di adesione. È dunque un metodo poco adatto per liste che si ritiene saranno soggette a continui mutamenti di utenza.
Un altro problema è poi quello del carbon copy e del reply. Supponiamo che voi siate iscritti alla lista planets@solar.system.it con il vostro indirizzo, deimos@marte.it. Supponiamo anche che mandiate un messaggio alla lista: nell'header From: del messaggio comparirà quindi il vostro indirizzo: From: deimos@marte.it. Nel risolvere l'alias della lista sendmail, vedendo che il vostro indirizzo fa parte di essa, non vi spedisce il messaggio!. Se dunque volete conservarne una copia dovete provvedere per conto vostro, per esempio rispedendovi il messaggio come Cc: o Bcc:.
Supponiamo ora che fra i riceventi del vostro messaggio ci sia anche caronte@plutone.it: il messaggio che questi riceve avrà, fra gli header, anche questi:
From: deimos@marte.it To: planets@solar.systems.it
Se per rispondere a questo messaggio usa un semplice "Reply", la
sua risposta viene inviata a deimos@marte.it(6)
e non a tutta la lista!!!. Affinché il messaggio giunga a
tutta la lista è necessario imporre l'header To:
a planets@solar.system.it, oppure fare un reply-to-all
(group reply con elm) che rimanda il messaggio a tutti gli indirizzi che trova
negli header From: e To:(7).
1) L'ideatore del linguaggio PERL. Nel suo libro Programming Perl sono numerosi gli esempi del tipo "Suppose your Boss comes into your room and asks:...".
2) ad esempio posso definire un alias mario in modo che la posta diretta a mario@gulch.unica.it venga automaticamente dirottata a rossi@bianchi.com.
3) L'indirizzo fittizio può essere definito ovunque nel file; per una quesitone di ordine è comunque consigliabile inserire prima gli alias e poi i riferimenti agli alias...
4) Per chi non lo conoscesse, elm è uno dei più popolari mailer con interfaccia a caratteri. Viene distribuito su diverse piattaforme, tra le quali, ovviamente, Linux.
5) Il processo è esattamente analogo a un comando cat pluto.txt | more: cat legge il file pluto.txt e lo passa allo standard input di more, e more filtra l'output di cat.
6)...sempre che deimos non abbia settato un
header Reply-to: ad un indirizzo diverso, p.e.
Reply-to: phobos@marte.it
nel qual caso il messaggio viene rispedito non a deimos ma a phobos.
7) il che significa che il messaggio
arriverà a deimos@marte.it due volte: la prima perché
tale indirizzo compare nell'header From:, la seconda perché è
iscritto alla lista... anche questo è un inconveniente del sistema...
Make About Copertina VFS |