Perché la app deve spedire mail?
Ci sono diversi motivi per cui la tua app potrebbe avere la necessità di spedire email. Ecco i più comuni:
- consentire agli utenti di impostarsi una nuova password se l'hanno dimenticata. Come vedremo, se un Utente della tua app dimentica la password di accesso, può richiedere di ricevere una mail, che contiene un link che gli consente di reimpostarla.
- consentire agli utenti di contattarti senza conoscere la tua mail. Usando il modulo Contatti, un Utente può scriverti un messaggio compilando una pagina della app e Drupal provvede a inviarti una mail col messaggio dell'Utente
- consentire agli Utenti di iscriversi da sé alla tua app. L'autoiscrizione di un Utente alla app richiede che Drupal spedisca una mail per verificare l'indirizzo mail dell'Utente.
- avvisare l'Amministratore di fatti che accadono nella app. Vedremo come costruire procedure che automaticamente avvisano per email l'Amministratore quando occorrono fatti di particolare interesse.
- ricevere avvisi sugli aggiornamenti dei moduli. Se abiliti la tua app a spedire mail, come Amministratore puoi ricevere mail che ti avvisano quando sono disponibili aggiornamenti dei moduli installati nella tua app.
Se la tua app non è particolarmente critica, non ha altri Utenti oltre a te oppure ha pochi Utenti che puoi contattare esternamente alla app, la spedizione di mail da parte della app potrebbe non interessarti. In tutti gli altri casi, vediamo come attivarla.
L'indirizzo mail della app
Durante l'installazione di Drupal hai definito un indirizzo mail della app, che puoi rivedere e modificare in Configurazione - Impostazioni di base - Indirizzo e-mail. Questo indirizzo è utilizzato da Drupal come mittente da cui spedire i messaggi.
Ogni indirizzo mail appartiene ad un dominio, che è la parte a destra della chiocciola (es. l'indirizzo "rossi@gmail.com" appartiene al dominio "gmail.com"). A sua volta, la tua app appartiene al dominio indicato nel suo indirizzo (es. una app con indirizzo https://vicinato.bottasini.eu appartiene al dominio "bottasini.eu"). La maggior parte dei sistemi di posta elettronica considerano sospetti i messaggi che hanno un mittente appartenente ad un dominio (es. "gmail.com") diverso da quello della app che spedisce il messaggio (es. "bottasini.eu"). I messaggi sospetti vengono automaticamente spostati nella casella di posta indesiderata (spam) e quindi non vengono visti dal destinatario. Per evitare questo problema, il dominio dell'indirizzo mail della app deve coincidere col dominio della applicazione che invia il messaggio.
Se la tua app è installata in un servizio cloud di web hosting, fa parte di un dominio pubblico. Se, come quasi sempre accade, il servizio cloud ti mette a disposizione anche almeno un indirizzo mail nel medesimo dominio, sei a posto: ti basta scrivere quell'indirizzo mail in Configurazione - Impostazioni di base - Indirizzo e-mail. Idem, se la tua app è installata su un server locale che fa parte di di un dominio pubblico ed il gestore della tua rete locale ti mette a disposizione un indirizzo mail nello stesso dominio.
APPROFONDIMENTO: Se invece non hai a disposizione un indirizzo mail nello stesso dominio del server dove è installata la app, oppure la tua app non ha un dominio pubblico (es. se è installata localmente con Laragon, che ti mette a disposizione solo un dominio non pubblico di nome ".test"), devi attivare un servizio di spedizione mail attraverso cui far transitare i messaggi: in questo modo i destinatari vedranno arrivare i tuoi messaggi come se fossero stati generati dal servizio esterno, con coerenza tra il dominio da cui arrivano ed il dominio dell'indirizzo mail del mittente. Purtroppo tutti i servizi di spedizione mail che ho provato a consultare richiedono a loro volta che tu abbia già un dominio e quindi non risolvono il problema. Sembra che l'unico servizio che accetti ancora di inoltrare mail per conto di una app priva di dominio è Gmail. Se hai un account Gmail, puoi provare questa strada seguendo queste istruzioni. Se avrò tempo, in futuro sperimenterò anch'io e riporterò qui l'esito. |
Come configurare la app per la spedizione di mail
Il modo più semplice per inviare mail da Drupal è usare il protocollo SMTP perché tutti i server di spedizione mail lo accettano e forniscono i parametri necessari al suo utilizzo. Ci sono diversi moduli aggiuntivi che consentono di utilizzare SMTP in Drupal. Tra questi, suggerisco il modulo "Drupal Symfony Mailer Lite" (DSML), perché supporta SMTP (oltre ad altri metodi di trasporto di mail, es. Sendmail) ed è particolarmente semplice da configurare.
Con DSML viene automaticamente installato anche il modulo "Mail System", che intercetta le richieste di spedizione mail da parte delle diverse funzioni di Drupal e le passa a DSML.
Questo schema evidenzia come un messaggio generato da una funzione della tua app arrivi nella casella Gmail, Outlook o altro dell'Utente destinatario, passando per Mail System e DSML dentro Drupal e, fuori Drupal, attraverso il server SMTP (in grigio i protocolli con cui il messaggio viaggia in internet):
| App Drupal | Internet | Server SMTP ✉ | Internet | Utenti | ||
| Reimpostazione password | Mail System ✉ | Drupal Symfony Mailer Lite (DSML) ✉ | SMTP ✉ | IMAP ✉ | Gmail →✉ | |
| Auto iscrizione | ||||||
| Contatti ✉→ | POP ✉ | Outlook →✉ | ||||
| Procedura ECA | ||||||
| Controllo disponibilità aggiornamenti | Sendmail | |||||
| Altra funzione | Altro trasporto | |||||
Installati ed attivati i moduli DSML e Mail System, ecco come fare per attivare la spedizione mail dalla tua app:
| 1 | Attiva su SMTP server un indirizzo mail e leggi i parametri richiesti dal server SMTP | Come fare dipende dal particolare servizio di spedizione mail. Scegli una username ed una password per il tuo indirizzo mail. Scriviti i parametri che ti vengono forniti dal servizio: nome del server SMTP (es. "mail.infomaniak.com"), porta (es. 587) e TLS si/no. |
| 2 | Imposta come indirizzo mail della app l'indirizzo mail che hai attivato sul server SMTP | In Configurazione - Impostazioni di base - Indirizzo e-mail scrivi l'indirizzo (es. "app@bottasini.eu") |
| 3 | Configura Mail System perché utilizzi DSML | In Configurazione - Mail System - Default Mail System seleziona Drupal Symfony Mailer Lite sia come Formattatore sia come Mittente |
| 4 | Configura DSML per la comunicazione col server SMTP | In Configurazione - Drupal Symfony Mailer Lite - Transport type seleziona SMTP. Configura il Trasporto SMTP così creato con i parametri della tua mail su server SMTP e definiti al passo 1. |
| 5 | Seleziona come predefinita la configurazione SMTP | In Configurazione - Drupal Symfony Mailer Lite clicca sulla freccina a fianco di SMTP e seleziona Imposta come predefinito |
| 6 | Prova la configurazione | In Configurazione - Drupal Symfony Mailer Lite - Test digita un indirizzo email valido cui hai accesso (es. il tuo personale) e verifica che ti arrivi un messaggio di prova dalla app. In caso di errori, verifica in Resoconti - Messaggi di log recenti se ci sono messaggi di errore ed analizzali per comprendere il problema. |
| AVVERTENZA: Se ti dovesse capitare di cambiare la password dell'indirizzo mail con cui ti connetti al server SMTP, al passo 4 attiva Change password, altrimenti la nuova password potrebbe non essere memorizzata. |