Caratteristiche e vantaggi del modulo
- Newsletter interamente all’interno di PrestaShop — i dati degli iscritti, il contenuto delle campagne e le statistiche restano nel database del negozio, senza trasferire la lista degli indirizzi a un fornitore esterno e senza costi in base al numero di messaggi inviati.
- Creatore di campagne in quattro passaggi (modello, prodotti, destinatari, invio) con anteprima in ogni fase e riepilogo prima dell’avvio.
- Blocco prodotti costruito dal catalogo del negozio: miniatura, nome, prezzo e link portano a prodotti reali, con prezzi e disponibilità del momento in cui la campagna viene preparata.
- Motore di invio proprietario con coda: lavoro a lotti, blocco contro l’invio parallelo della stessa campagna, nuovi tentativi per gli indirizzi non riusciti e ripresa dopo un’interruzione — nulla va perso dopo la chiusura della scheda del browser.
- Console di invio in tempo reale con una riga per ogni tentativo: ora, indirizzo, risultato e risposta completa del server di posta in caso di rifiuto — si vede esattamente cosa ha respinto il server, senza entrare nei log di PrestaShop.
- Undici controlli prima dell’invio che non sono decorativi: una riga contrassegnata come bloccante impedisce l’avvio della campagna indicando il motivo concreto.
- Diagnostica del dominio del mittente (MX, SPF, DKIM, DMARC) direttamente nel pannello — questi record decidono se Gmail e Yahoo tratteranno l’invio massivo come autenticato.
- Conformità ai requisiti di disiscrizione: intestazioni per la disiscrizione con un clic (RFC 8058) e link di disiscrizione richiesto in ogni lingua del modello, verificato prima dell’invio.
- La modalità di prova (dry run) consente di simulare l’intera campagna dall’inizio alla fine — il motore percorre tutta la coda, ma nessun messaggio lascia il negozio.
- Il registro dei consensi legge in tempo reale le prove direttamente da PrestaShop e non afferma mai che qualcuno abbia dato il consenso se non esiste una registrazione — un indirizzo senza data registrata viene descritto come “mancanza di prova”, non come consenso.
- Editor TinyMCE 6.8.6 incluso con licenza MIT — modifichi i contenuti dei modelli in WYSIWYG senza scaricare nulla da CDN.
- Cinque modelli di messaggio pronti e responsive in versione polacca e inglese, installati insieme al modulo e ripristinabili con un solo pulsante.
- Supporto completo per più lingue e multistore: oggetto e contenuto separati per ogni lingua, campagna assegnata in modo permanente a un solo negozio.
- Interfaccia interamente tradotta in polacco, in un sistema di traduzione duale che supporta sia i dizionari classici sia il sistema di PrestaShop 1.7.8+.
- Nessun Composer, nessuna libreria PHP esterna e nessuna connessione a servizi esterni durante l’invio — il modulo utilizza la configurazione di posta di PrestaShop stesso.
Funzionalità principali del modulo
- Scheda dedicata nel pannello di amministrazione (nel menu Clienti) con otto sezioni: Dashboard, Campagne, Modelli, Destinatari, Importazione, Consensi, Statistiche e Impostazioni.
- Creatore di campagne: passaggio 1 — nome e modello, passaggio 2 — prodotti e aspetto del blocco, passaggio 3 — destinatari, passaggio 4 — controlli, pianificazione e invio.
- Ricerca prodotti per nome, riferimento e codice EAN, oltre all’aggiunta massiva da categoria: 8 bestseller, 8 più recenti oppure un’intera categoria.
- I bestseller sono calcolati in base alle unità vendute negli ultimi 30 giorni, esclusivamente da ordini validi.
- Layout del blocco prodotti: 1, 2 o 3 colonne e quattro stili di scheda (Chiaro, Scuro, Con bordo, Esteso) con palette colori personalizzata; l’ordine dei prodotti si modifica con le frecce su/giù accanto a ogni elemento.
- Avviso sulla dimensione del messaggio misurata lato server rispetto alla soglia di troncamento di Gmail (~102 kB) — prima che la campagna venga inviata tagliata.
- Possibilità di inviare la campagna anche senza blocco prodotti.
- Libreria dei modelli: cinque layout pronti (Classico (default), Promozione, Editoriale, Minimal, Griglia), creazione di modelli personalizzati, duplicazione, anteprima, invio di prova e pulsante per ripristinare i modelli dal pacchetto.
- Oggetto e contenuto del messaggio separati per ogni lingua del negozio, modificati in TinyMCE 6.8.6 senza CDN.
- Diciassette segnaposto da inserire nel modello: {firstname}, {lastname}, {email}, {shop_name}, {shop_url}, {shop_logo_url}, {date_text}, {unsubscribe_link}, {view_in_browser}, {page_new_products}, {page_best_sales}, {page_contact_link}, {page_sitemap}, {page_my_orders}, {page_my_addresses}, {page_my_vouchers}, {page_my_personal_info} — più {products} per il blocco prodotti.
- Gli indirizzi delle pagine del negozio nei segnaposto vengono risolti per il negozio della campagna e per la lingua del destinatario, utilizzando gli URL amichevoli della lingua specifica.
- Selezione dei destinatari: gruppi clienti, lingue dei destinatari, lista importata da CSV, mailing list e lista di indirizzi esclusi — con conteggi in tempo reale (Nativi, Importati, Esclusi, Totale).
- Unione e deduplicazione degli indirizzi da tutte le fonti in base all’indirizzo e-mail, con sottrazione automatica dei disiscritti e degli esclusi.
- Mailing list statiche (esattamente gli indirizzi che vi inserisci) e dinamiche (filtri salvati ricalcolati al momento della preparazione della campagna), con possibilità di rinominare, duplicare, esportare in CSV ed eliminare.
- Browser di tutti gli indirizzi conosciuti — clienti, ospiti iscritti tramite il blocco newsletter di PrestaShop e indirizzi importati — in un unico posto, con filtri per fonte, stato, lingua e gruppo clienti.
- Segmentazione in base alla cronologia acquisti: importo minimo speso, numero minimo di ordini, acquisto negli ultimi N giorni, clienti che hanno acquistato in passato ma non negli ultimi N giorni, acquisto da una categoria specifica, acquisto di un prodotto specifico (ID) e mancato acquisto di un prodotto specifico.
- Importazione di indirizzi da file CSV nel formato
email;firstname;lastname;iso— è obbligatoria solo la colonna e-mail, il separatore (punto e virgola, virgola o tabulazione) viene rilevato automaticamente, la riga di intestazione viene ignorata, fino a 50.000 righe per file. - La reimportazione dello stesso indirizzo aggiorna i suoi dati invece di creare un duplicato; gli indirizzi importati possono essere aggiunti subito alla mailing list selezionata.
- Invio immediato dalla scheda del browser aperta oppure pianificato per una data e ora selezionate ed eseguito tramite attività cron.
- Motore di invio con parametri: dimensione del lotto 1–500 messaggi (predefinito 20), pausa tra i messaggi 0–5000 ms (predefinito 100), budget di tempo per una singola esecuzione 5–45 s (predefinito 20) e numero di tentativi per destinatario 1–10 (predefinito 3).
- Controllo dell’invio: Pausa, Riprendi e Arresta, oltre alla possibilità di prendere il controllo di una campagna avviata in un’altra scheda o gestita da cron.
- Console di invio in tempo reale in forma di finestra di testo: una riga per ogni tentativo, con ora, indirizzo, risultato (accettato, rifiutato e ritentato, abbandonato, saltato) e messaggio completo del server di posta.
- I contatori di avanzamento distinguono tra Non riusciti e Ritentati — un indirizzo rifiutato prima dell’esaurimento dei tentativi è visibile subito, non solo al termine della campagna.
- Tabella della coda con filtro per stato (Tutti, Non riusciti, Inviati, In attesa, Saltati), raggruppamento degli errori in base alla risposta del server e distinzione tra errori temporanei (4xx) e permanenti (5xx).
- Esportazione degli indirizzi non riusciti in file CSV direttamente dalla schermata di invio.
- Undici controlli prima dell’invio: metodo di invio della posta in PrestaShop, correttezza degli indirizzi sulla busta (BCC e Reply-To), presenza dei destinatari, contenuto del messaggio congelato, link di disiscrizione in ogni lingua, oggetto in ogni lingua, messaggio di prova inviato, conformità dell’indirizzo del mittente con il dominio del negozio, record SPF/DKIM/DMARC, modalità di prova e intestazioni per la disiscrizione con un clic.
- Invio di prova a qualsiasi indirizzo, nella lingua selezionata, funzionante anche con la modalità di prova attivata.
- Modalità di prova (dry run): il motore percorre tutta la coda e contrassegna i destinatari come inviati, ma la chiamata di invio non avviene — con avviso visibile nella schermata di invio e nelle impostazioni.
- Impostazioni del mittente: indirizzo e nome del mittente, indirizzo Reply-To per le risposte dei clienti e copia archivio BCC di ogni messaggio della campagna (i messaggi di prova non vengono archiviati).
- URL dell’attività cron con chiave segreta, informazione sull’ultima esecuzione, avviso quando cron non si segnala da oltre un’ora e pulsante per generare un nuovo indirizzo; una chiave errata o mancante riceve semplicemente 403.
- Diagnostica del dominio del mittente avviata dalla scheda Impostazioni: lettura dei record MX, SPF, DKIM e DMARC senza apportare alcuna modifica.
- Tracciamento delle aperture con pixel invisibile 1×1, con opzione di disattivazione completa — con il tracciamento disattivato il pixel non viene incorporato affatto e il numero di aperture resta zero.
- Tracciamento dei clic: i link nel contenuto della campagna vengono registrati durante la sua preparazione e passano attraverso il reindirizzamento proprietario del modulo; l’indirizzo di destinazione viene letto dal database tramite identificatore, mai dalla richiesta, quindi il reindirizzamento non può essere dirottato.
- Attribuzione del fatturato alla campagna con metodo dell’ultimo clic in una finestra di 1–90 giorni (predefinito 7); la finestra applicata viene salvata con ogni ordine attribuito, quindi la modifica dell’impostazione non riscrive la cronologia.
- Scheda Statistiche: per ogni campagna stato, numero di destinatari, inviati, non riusciti, aperture, tasso di apertura, fatturato attribuito e date di inizio e fine.
- Dashboard con selezione del periodo (sempre, 7, 30 o 90 giorni) e sette blocchi: indicatori chiave, grafico di invii e aperture nel tempo, base iscritti, stato della deliverability, disiscrizioni, campagne recenti e campagne più efficaci.
- Pagina “Visualizza nel browser” per ogni campagna, personalizzata per il destinatario e funzionante anche per campagne non ancora inviate.
- Pagina di disiscrizione senza login, protetta da token: l’accesso tramite link mostra una pagina di conferma e la disiscrizione avviene solo dopo la conferma — in questo modo gli scanner di sicurezza della posta e le anteprime dei link non disiscrivono nessuno per errore.
- La disiscrizione aggiorna contemporaneamente il consenso del cliente in PrestaShop, la voce nella tabella delle iscrizioni ospiti e l’elemento nella lista importata, e l’indirizzo finisce nella lista comune dei disiscritti.
- Registro dei consensi: fonte dell’indirizzo, prova registrata (data e indirizzo IP dell’iscrizione), informazione se è consentito inviare a quell’indirizzo, ultimo evento registrato dal modulo ed esportazione completa in CSV.
- Lista dei disiscritti con motore di ricerca e possibilità di rimuovere una voce quando il destinatario richiede nuovamente l’iscrizione.
- Duplicazione delle campagne e sette stati univoci: bozza, pronta, pianificata, in corso di invio, in pausa, completata e arrestata.
- Congelamento della campagna durante la preparazione: contenuto, prezzi, prodotti e lista dei destinatari vengono fissati al momento della preparazione, non riletti nuovamente al momento dell’invio effettivo.
Deliverability dei messaggi
- Controllo del metodo di invio della posta in PrestaShop: un negozio impostato su “non inviare mai e-mail” viene rilevato prima dell’avvio, invece di riportare l’intera campagna come consegnata.
- Verifica degli indirizzi sulla busta (BCC e Reply-To) prima dell’invio — un solo indirizzo in un dominio che non accetta posta può bloccare l’intero messaggio, insieme a tutti i veri destinatari.
- Lettura dei record SPF e DMARC del dominio del mittente e verifica della chiave DKIM per il selettore utilizzato da PrestaShop.
- Confronto dell’indirizzo del mittente con il dominio del negozio — l’invio massivo da un dominio esterno (ad es. da una casella gratuita) è la causa più frequente del finire nello spam.
- Intestazioni
List-UnsubscribeeList-Unsubscribe-Postconformi a RFC 8058, grazie alle quali i provider di posta mostrano il proprio pulsante di disiscrizione (PrestaShop 1.7.5 e versioni successive). - Obbligo della presenza del link di disiscrizione in ogni lingua salvata della campagna — la sua assenza blocca l’invio.
- Breve pausa dopo ogni messaggio e lavoro a lotti, per non sovraccaricare il server di posta e non incorrere nei limiti di invio.
- Distinzione tra rifiuti temporanei (codici 4xx — ad es. greylisting, casella piena) e permanenti (codici 5xx — ad es. indirizzo inesistente), visibile per ogni gruppo di errori.
Consensi, disiscrizioni e dati personali
- Il registro dei consensi legge le prove direttamente da PrestaShop a ogni richiesta (data di iscrizione alla newsletter, indirizzo IP dell’iscrizione, indirizzo della pagina di provenienza) — non crea una propria copia che potrebbe disallinearsi rispetto al negozio.
- Un indirizzo senza data di iscrizione registrata viene descritto come “mancanza di prova”, non come consenso — il modulo non sostituisce mai la data di creazione dell’account o la data di caricamento del file CSV al posto della data del consenso.
- Il registro eventi proprietario del modulo annota esclusivamente ciò che PrestaShop non salva: importazione di un indirizzo da file CSV, disiscrizione tramite il link del modulo e modifiche dell’appartenenza alle mailing list.
- La disiscrizione vale per tutta l’installazione: un indirizzo disiscritto in una campagna e in un negozio viene escluso da tutte le campagne future in tutti i negozi.
- Un indirizzo presente nella lista dei disiscritti resta escluso indipendentemente da quante volte venga reimportato o riattivato.
- Esportazione del registro dei consensi in file CSV per esigenze di documentazione e controllo.
- Il tracciamento delle aperture può essere disattivato completamente se in un determinato mercato un pixel di tracciamento non annunciato viene considerato una questione di consenso.
Multistore e multilingua
- La campagna appartiene esattamente a un solo negozio — i suoi destinatari, i prezzi dei prodotti e il nome e indirizzo del negozio nel contenuto provengono da quel negozio, mai dal contesto corrente del pannello.
- La lista dei disiscritti e la lista importata sono comuni a tutta l’installazione, ed è una scelta consapevole: la rinuncia a ricevere messaggi riguarda la persona e l’indirizzo, non uno dei negozi.
- Oggetto e contenuto del messaggio impostati separatamente per ogni lingua del negozio, con fallback alla lingua predefinita quando una lingua specifica non ha un proprio contenuto.
- Filtro delle lingue dei destinatari nella fase di selezione dei destinatari; gli indirizzi importati senza una propria lingua vengono conteggiati come lingua predefinita del negozio.
- I segnaposto degli indirizzi delle pagine del negozio vengono espansi nella lingua del destinatario, utilizzando gli URL amichevoli di quella lingua.
Sicurezza e impatto sul negozio
- Il modulo non registra alcun hook che visualizzi contenuti sul front office, quindi non aggiunge nulla alle pagine del catalogo, del carrello o dell’ordine.
- Le uniche pagine front office proprietarie sono: disiscrizione, anteprima del messaggio nel browser, pixel di apertura, reindirizzamento del clic e punto di ingresso dell’attività cron — il foglio di stile del modulo viene caricato esclusivamente nella pagina di disiscrizione.
- Durante l’installazione il modulo crea due indici ausiliari sulle tabelle dei clienti e delle iscrizioni alla newsletter, affinché il conteggio dei destinatari non scansioni intere tabelle; durante la disinstallazione entrambi vengono rimossi.
- Il salvataggio dell’attribuzione delle vendite viene eseguito alla creazione e al cambio di stato dell’ordine, in un blocco che intercetta tutti gli errori — la statistica della newsletter non può compromettere l’inoltro dell’ordine.
- I link di disiscrizione e di anteprima nel browser sono firmati con la chiave segreta dell’installazione; il token è funzione dell’indirizzo e della chiave, quindi non può essere indovinato.
- L’URL dell’attività cron è protetto da una chiave segreta — ogni chiamata senza la chiave corretta riceve 403 e nulla più.
- Ogni endpoint AJAX del pannello verifica i permessi del profilo del dipendente (visualizzazione o modifica), e le campagne sono limitate al negozio in cui il dipendente lavora.
- La pagina di disiscrizione non mostra mai l’indirizzo e-mail trasmesso in caso di token errato.
- Il reindirizzamento del clic termina sempre su una pagina del negozio, anche in caso di link sconosciuto o errore del database — la ricetta per non perdere una visita che la campagna ha appena pagato.
Applicazione aziendale
- Per i negozi che vogliono gestire una newsletter senza l’abbonamento a un sistema di mailing esterno e senza trasferirgli il database degli indirizzi.
- Per i negozi che inviano campagne prodotto — novità, saldi, bestseller — in cui il contenuto del messaggio deve comporsi di prodotti reali del catalogo.
- Per i venditori che devono documentare la base giuridica dell’invio: registro dei consensi, registro delle disiscrizioni ed esportazione in CSV rispondono alla domanda “da dove avete il mio indirizzo”.
- Per i negozi dopo la migrazione a PrestaShop 8 o 9, che hanno bisogno di una newsletter funzionante sul core attuale e su PHP 8.x.
- Per i negozi multistore, in cui ogni negozio gestisce le proprie campagne, ma le rinunce devono valere ovunque.
- Per i venditori che riattivano clienti inattivi — la segmentazione in base alla cronologia acquisti consente di individuare chi acquistava in passato, ma non negli ultimi mesi.
Compatibilità
- PrestaShop: 1.7.x – 9.x
- PHP: 7.0 – 8.5
- MySQL 5.6+ / MariaDB 10.x+
- Senza Composer e senza librerie PHP esterne; TinyMCE 6.8.6 (licenza MIT) incluso nel modulo.
- L’invio avviene tramite la configurazione di posta di PrestaShop stesso (SMTP o funzione mail), senza API esterne.
Link alla demo del modulo:
Demo pannello amministrativo:
https://moduly-prestashop.eu/pdnewsletterpro/admin-dev
Demo front office:
https://moduly-prestashop.eu/pdnewsletterpro