Alfresco InboundSMTP: come inviare e-mail ad Alfresco

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 pippo@176.45.234.09!!

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 pippo@miodominio.it

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.

Andrea Como

Sono un software engineer focalizzato nella progettazione e sviluppo di applicazioni web in Java. Presso OmniaGroup ricopro il ruolo di Tech Leader sulle tecnologie legate alla piattaforma Java EE 5 (come WebSphere 7.0, EJB3, JPA 1 (EclipseLink), JSF 1.2 (Mojarra) e RichFaces 3) e Java EE 6 con JBoss AS 7, in particolare di CDI, JAX-RS, nonché di EJB 3.1, JPA2, JSF2 e RichFaces 4. Al momento mi occupo di ECM, in particolar modo sulla customizzazione di Alfresco 4 e sulla sua installazione con tecnologie da devops come Vagrant e Chef. In passato ho lavorato con la piattaforma alternativa alla enterprise per lo sviluppo web: Java SE 6, Tomcat 6, Hibernate 3 e Spring 2.5. Nei ritagli di tempo sviluppo siti web in PHP e ASP. Per maggiori informazioni consulta il mio curriculum pubblico. Follow me on Twitter - LinkedIn profile - Google+

  • estaloco

    Salve a tutti
    entro in merito a questa discussione per chiedervi un aiuto in proposito di invio/ricezione email da programmi tipo Alfresco.
    Uso come sistema di protocollo archiviazione dati il software E-prot che gira su motore Alfresco.
    In tale programma esiste una sezione Amministratore dove si puo’ selezionare un indirizzo email ed uno per la PEC sia in entrata che in uscita tipo Outlook.
    Ora tutti gli utenti inseriti nel programma riescono a visualizzare le emai in ingresso ma nessuno riesce a far partire in uscita la posta?
    secondo voi esiste un parametro dove bisogna intevenire a mano nelle configurazioni di Tomcat o database che ha motore alfresco?

    grazie scusate se sono uscito leggermente dal tema principale