La newsletter di TurboLab.it, chiamata Questa settimana su TLI, è una email inviata settimanalmente agli iscritti.
Il mittente della mail è impostato nel servizio Newsletter.php, ed è un alias della mailbox info@turbolab.it
.
La newsletter raccoglie i link a tutti i contenuti pubblicati sul sito nel corso della settimana:
- articoli e notizie usciti (o ri-usciti) in home page
- discussioni del forum: iniziate, oppure che hanno ricevuto nuove risposte
Ogni volta che viene spedita la newsletter, viene generato e pubblicato automaticamente un articolo sul sito con i medesimi contenuti.
La guida per utenti finali è disponibile qui: Ricevere "TurboLab.it" via email: Come dis/iscriversi dalla newsletter.
L'archivio completo di tutti gli invii è il tag "newsletter turbolab.it".
Le priorità principali nella gestione della newsletter sono:
- automazione totale: generazione e invio devono avvenire automaticamente, senza bisogno di alcuna conferma o interventi esterni
- offrire a quanti più utenti possibile l'occasione di ricevere almeno una volta la newsletter per valutare se possa loro interessare
- NO SPAM! Chi non vuole la newsletter non deve riceverla, senza ostacoli o ritardi
La newsletter viene generata sul server di TurboLab.it e inviata direttamente alle mailbox degli iscritti tramite il servizio SMTP in esecuzione sul server stesso. Abbiamo dunque scelto di non utilizzare servizi esterni, per i seguenti motivi:
- non dipendere dalla disponibilità di un servizio sul quale non abbiamo alcun controllo
- evitare i costi dei servizi esterni di invio mail, che oltretutto crescono con il numero di invii
- evitare di condividere gli indirizzi email degli iscritti con aziende terze
L'iscrizione alla newsletter dei singoli utenti è gestita tramite l'attributo Gli amministratori possono inviarti email
, nativo di phpBB e accessibile da ogni utente tramite il proprio pannello di controllo sul forum (scheda Preferenze
, gruppo Preferenze globali
).
Non è dunque possibile "registrarsi alla newsletter" senza "registrarsi al forum" (issue #18).
È però possibile che un utente registrato al forum scelga di non ricevere la newsletter.
L'iscrizione alla newsletter viene attivata per la prima volta al momento della registrazione al forum, poiché l'attributo in questione è valorizzato di default a true
per impostazione predefinita di phpBB.
È possibile visualizzare in anteprima la prossima uscita della newsletter tramite la pagina /newsletter/anteprima:
- se l'utente che visualizza la pagina è loggato al sito ➡ la pagina di anteprima utilizza il suo nome utente e la sua email
- se l'utente NON è loggato ➡ vengono mostrati i dati dell'utente System. In tal caso, il link di dis-iscrizione non funziona realmente
La pagina di anteprima non invia nessuna email, ma mostra soltanto il contenuto nel browser web.
La newsletter viene spedita periodicamente agli iscritti tramite cron (staging | prod).
Il comando utilizzato è scripts/newsletter-send.sh, che a sua volta esegue Command/NewsletterSendCommand.php.
Per inviare manualmente la newsletter** tramite lo script, impartire:
bash scripts/newsletter-send.sh
: invia la newsletter solo aSystem <info+system@turbolab.it>
. A seconda di come è configurato l'ambiente, la mail potrebbe arrivare nella mailbox indicata oppure su mailtrap.io- ⚠⚠
bash scripts/newsletter-send.sh --unlocked
: invia la newsletter a tutti gli iscritti. Funziona solo sull'ambiente di produzione
Se viene specificata l'opzione --dry-run
, il comando non invia nessuna mail, ma simula solo l'esecuzione della procedura.
Quando la mailbox collegata all'invio della newsletter (newsletter@tli
) riceve una Delivery status notification in risposta all'invio di una email:
- un filtro impostato nella webmail inoltra il messaggio verso una casella dedicata su gmx.com
- il comando scripts/email-bounce-manager.sh (ovvero Command/EmailBounceManagerCommand.php) si collega alla casella GMX via IMAP, estrae gli indirizzi problematici e li dis-iscrive
Tale comando viene eseguito quotidianamente via cron (staging | prod), ma può anche essere lanciato manualmente.
Vogliamo fare il possibile per disattivare immediatamente l'invio della newsletter a coloro che non la vogliano ricevere. Oltre ai link di dis-iscrizione presenti nel corpo di ogni email, è attivo un meccanismo che auto-annulla l'iscrizione se l'utente non clicca alcun link presente nella newsletter per un determinato numero di mesi consecutivi.
Allo scopo, ogni link presente nella newsletter è inserito come parametro della pagina /newsletter/open
. Tale pagina riceve due parametri:
opener=...
: è la versione crittografata dell'ID utente al quale è stata inviata la specifica mailurl=...
: è l'URL "finale" che deve essere mostrato quando l'utente clicca su quel link
Un esempio (non-funzionante) del link che conduce alla homepage è il seguente:
https://turbolab.it/newsletter/open?opener=Mg...pw%3D&url=https%3A%2F%2Fturbolab.it
La pagina /newsletter/open
si occupa di:
- de-crittografare il parametro
opener=
, ricavando l'ID dell'utente - inserire/aggiornare il record relativo all'utente nella tabella
newsletter_opener
- eliminare l'eventuale record presente nella tabella
newsletter_expiring_warn
che indica la data nella quale l'utente è stato avvisato che la sua iscrizione sarebbe stata disattivata a breve per inattività - effettuare un redirect verso l'URL "reale", presente nel parametro
url=
La procedura NewsletterWarnInactive si occupa periodicamente di avvisare gli utenti iscritti alla newsletter, ma che non clicchino su alcun link da molto tempo, che la loro iscrizione sarà annullata, se non la confermano.
Vogliamo minimizzare l'invio di queste email, che creano comunque "rumore" nella casella dell'utente e sono per lo più inviate come cortesia nei confronti di utenti che, per altro, o hanno abbandonato la mailbox in questione oppure non sono interessati alla newsletter.
La procedura inizia con un'attività di manutenzione che consiste nell'estrarre tutti gli utenti NON iscritti alla newsletter. Per ognuno di loro:
- viene eliminata ogni riga dalla tabella
newsletter_opener
- viene eliminata ogni riga dalla tabella
newsletter_expiring_warn
Da questa situazione "pulita", la procedura seleziona gli utenti che soddisfino tutti i seguenti criteri:
- sono iscritti al sito da almeno APP_NEWSLETTER_SUBSCRIPTION_EXPIRE_WARN_MONTHS mesi
- sono iscritti alla newsletter
- non hanno una entry nella tabella
newsletter_opener
aggiornata prima di APP_NEWSLETTER_SUBSCRIPTION_EXPIRE_WARN_MONTHS mesi fa - non hanno una entry nella tabella
newsletter_expiring_warn
A ognuno degli utenti selezionati, la procedura invia una email di avviso: "se non confermi l'iscrizione alla newsletter cliccando sul link presente nella mail stessa, verrai dis-iscritto". Il link proposto usa /newsletter/open
per condurre a una pagina di conferma.
La procedura salva poi una entry relativa all'invio nella tabella newsletter_expiring_warn
, di modo che l'utente non venga avvisato nuovamente alla prossima esecuzione.
La procedura NewsletterUnsubscribeInactive si occupa periodicamente di estrarre tutti gli utenti che abbiano una entry nella tabella newsletter_expiring_warn
più vecchia di APP_NEWSLETTER_SUBSCRIPTION_EXPIRE_AFTER_WARN_MONTHS. Ognuno di questi utenti:
- viene dis-iscritto dalla newsletter
- riceve una email che lo informa della dis-iscrizione e offre un link per ri-iscriversi
Come parte della procedura di dis-iscrizione vengono inoltre eliminate tutte le righe relative dalle tabelle newsletter_opener
e newsletter_expiring_warn
.
- il template della newsletter (email/newsletter.html.twig) utilizza il CSS fornito da 📚 Foundation for Emails
- il markup del template HTML è scritto in 📚 Inky
- il CSS viene spostato in-line tramite il filtro
inline_css
, fornito datwig/cssinliner-extra
- il post-processing ("building") di Inky in HTML viene svolto dal filtro Twig
inky_to_html
, fornito datwig/inky-extra