In questi giorni mi sono trovato alle prese con l’abilitare il server “inbound” SMTP di Alfresco per potergli inviare mail da poter archiviare come documenti, insieme agli allegati. Fin qui niente di nuovo, l’abilitazione è ben documentata, ma come fare ad inviare mail ad Alfresco per esempio dal proprio indirizzo gmail? Bisogna che l’smtp di Google veda quello di Alfresco: come fare quindi?
Facciamo un passo indietro
Alfresco è un famoso Enterprise Content Management scritto in Java e basato su Spring. In due parole, si tratta di un repository che permette di gestire documenti, regolamentato da una profilazione utente molto granulare, che va dall’archiviazione alla ricerca indicizzata dei contenuti.
Alfresco implementa una serie di protocolli che permettono l’accesso al repository come WebDAV, FTP, CIFS, CMIS… e tra i vari servizi, implementa anche SMTP, che permette di mappare una cartella del repository con un alias di posta elettronica in modo da poter inviarci dentro direttamente le mail. Sia il corpo della mail che i propri allegati diventeranno nuovi documenti.
Prerequisiti
Affinché Alfresco possa riceve mail da un smtp esterno alla rete aziendale, è necessario che:
- il server sia accessibile da internet e sia associato un dominio alla propria installazione di Alfresco
- il DNS contenga il record A, CName e MX
- un certificato “privato” SSL
- gli utenti che possono effettivamente inviare email devono far parte del gruppo EMAIL_CONTRIBUTORS
Accesso da internet e dominio
Di solito le installazioni di Alfresco in cui ero stato coinvolto erano sempre a livello di intranet per cui niente dominio: chi inviava mail ad Alfresco aveva l’IP dell’SMTP di Alfresco configurato nei propri client di posta: spartano, ma non erano necessarie altre configurazioni (se non ovviamente gli utenti nel gruppo EMAIL_CONTRIBUTORS).
Volendo invece fare una cosa seria e permettere a qualsiasi provider di posta di poter inviare mail ad Alfresco, la situazione si complica un po’. Intanto abbiamo bisogno di un dominio: sia per una maggior leggibilità, sia perché molti provider non permettono di inviare mail a !!
Configurazione del DNS
Una volta avuto il dominio, per esempio miodominio.it è necessario baloccarsi con il DNS (e qui non essendo per niente esperto ho avuto le prime difficoltà). Alla fine ne sono uscito vincitore con tre interventi, due dei quali obbligatori:
- Registrazione del Record A
-
questo è il record principale del DNS ed è quello che associa il dominio all’indirizzo IP. Associamo quindi l’host www all’IP:
www >> 176.45.234.09
- Registrazione del Record CName
- i CName non sono che “alias” di un record A. Possiamo quindi creare l’host smtp da associare al nostro dominio:
-
smtp >> www.miodominio.it
Questo passo può essere sostituito dall’associazione dell’IP a smtp.miodominio.it come record A. L’effetto finale è lo stesso, ma usare il CName è più corretto.In questo modo, chiamare www.miodominio.it o smtp.miodominio.it corrisponde allo stesso IP.
- Registrazione del Record MX
- questo è il record principale quando si ha a che fare con servizi di posta. MX sta per Mail eXchanger e specifica i mail server associati al dominio. Aggiungiamo quindi smtp.miodominio.it al record MX in modo che gli altri mail server sappiano chi chiamare quando invieremo una mail a
Il certificato
La prima volta che avevo fatto un test di invio mail mi ero fermato al passo precedente: invio una mail dal mio account gmail ad Alfresco per prova e… niente 🙁 almeno fino al giorno dopo. Google infatti dopo un giorno mi notifica che non ha potuto inviare la mail perché il server non supporta il TLS:
TLS Negotiation failed: generic::failed_precondition: starttls error (0): protocol error
Fortunatamente era un caso coperto dalla documentazione di Alfresco! E’ necessario quindi configurare SSL per JVM e la documentazione spiega come. In due parole:
- generare un certificato SSL “privato”, cioè autofirmato
keytool -genkey -keystore miodominioKeystore -keyalg RSA
- aggiungere il certificato ai parametri della JVM. Nel Tomcat, per esempio, possono essere tranquillamente passati nel file setenv.sh
JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.keyStore= miodominioKeystore -Djavax.net.ssl.keyStorePassword=myS3cr37P@ss"
In un ambiente di produzione forse è meglio affidarsi ad un ente certificassero esterno come RapidSSL per esempio. Il certificato privato comunque non inficia il servizio.
Il gruppo contributore tramite e-mail
Una volta impostato il certificato e riavviato il server, il test dell’invio della mail andrà a buon fine, ammesso che il mittente sia appartenente al gruppo EMAIL_CONTRIBUTORS. Approfondiamo meglio questo punto.
Premesso che in Alfresco ogni utente ha obbligatoriamente un indirizzo mail, quando si invia una mail ad Alfresco, possono accadere diversi scenari:
- l’utente è registrato in Alfresco
-
- se fa parte del gruppo EMAIL_CONTRIBUTORS, la mail viene ricevuta
- se NON fa parte del gruppo EMAIL_CONTRIBUTORS, la mail viene respinta con un messaggio di errore del tipo
554 L'utente 'pippo' non fa parte del gruppo di contributori ai messaggi e-mail
Nel caso di mail ricevuta, il proprietario del documento creato dalla mail sarà l’utente registrato.
- l’utente NON è registrato in Alfresco
- in questo caso l’utente proprietario del documento creato dalla mail chi sarebbe? Nella configurazione del server SMTP (solitamente nel file alfresco-global.properties) esiste la property:
email.inbound.unknownUser=anonymous
Dove anonymous è un utente creato ad hoc per gestire questi casi (ovviamente ognuno può metterci l’utente che vuole). Il proprietario del documento creato dalla mail sarà quindi anonymous, ammesso che ovviamente anch’esso faccia parte del gruppo EMAIL_CONTRIBUTORS, altrimenti la mail verrà respinta.
Conclusioni
Trovo molto interessante la possibilità di inviare mail ad una cartella di Alfresco: questa funzionalità diventa veramente utile in un contesto dove ogni provider di posta è capace di inviargli mail. Come fare però per evitare lo spam? Il rischio c’è. Sicuramente si può intervenire su chi aggiungere al gruppo EMAIL_CONTRIBUTORS, ma, come mostra la documentazione di Alfresco in merito, tramite delle opportune properties di configurazione, è possibile definire con espressioni regolari i domini da cui si accettano o si rifiutano mail.