Hai mai avuto la necessità di inviare una comunicazione personalizzata a decine o centinaia di contatti etichettati nella tua rubrica di Google Workspace (o in una condivisa come delegato), ma ti sei scontrato con la scomodità del campo Ccn o la rigidità degli strumenti standard?
Se la risposta è sì, sei nel posto giusto. In questo articolo, ti guiderò passo dopo passo nella creazione di un potente sistema di “stampa unione” (mail merge) personalizzato, costruito interamente all’interno dell’ecosistema Google. Sfrutteremo la potenza di Google Apps Script e un semplice Foglio Google per gestire destinatari, modelli di messaggio dinamici (con segnaposto come {{Nome}}) e abbinamenti automatici basati sulle tue etichette.
Non preoccuparti se non sei un programmatore: questa guida è pensata per essere seguita facilmente, e troverai tutto il codice e le istruzioni necessarie per configurare il tuo invio massivo occasionale, restando ampiamente sotto i limiti giornalieri di Google Workspace (che arrivano fino a 2000 email al giorno). Preparati a trasformare il tuo modo di comunicare!
Sommario
Premesse
- Uso Google Workspace.
- Ho una rubrica mia o aziendale per la quale sono delegato.
- Ho etichettato i contatti. Ciascuna etichetta può comprendere diverse decine o qualche centinaio di contatti.
- Non effettuo più di 2000 invii di email al giorno.
- Vorrei effettuare occasionalmente degli invii di email di messaggi standard ai contatti filtrati per etichetta.
Assunzioni
- Ho a disposizione un tecnico che mi può predisporre uno script nell’ambiente di programmazione di Google Workspace: Apps Script.
- Gestiremo tutto in un unico foglio di calcolo di Google.
- Lo script deve prevedere i costrutti di
- segnaposto;
- modello di messaggio; e deve prevedere un metodo di riscrittura, in modo da poter inserire nel foglio di calcolo non solo i dati del destinatario (nome, cognome, email) ma anche il modello da usare in base ed i modelli disponibili (ciascuno inserito in una cella).
Struttura dati
- Tabella con i destinatari etichettati: nome, cognome, indirizzo email, etichetta ed ogni altro eventuale dato.
- Tabella con i modelli di messaggio, con dentro segnaposto come {{nome}}, {{cognome}}, {{email}}
- Tabella di abbinamento tra etichette e modelli.
Casi d’uso
Preparazione del Foglio Google
- Foglio 1: Destinatari
- Colonna A: Email
- Colonna B: Nome
- Colonna C: Cognome
- Colonna D: Etichetta (es. “Clienti_VIP”, “Fornitori_Nord”)
- Colonna E: Stato

- Foglio 2: Modelli
- Colonna A: Nome Modello (es. “Promo_Natale”, “Aggiornamento_Listino”)
- Colonna B: Oggetto
- Colonna C: Corpo

- Foglio 3: Abbinamenti
- Colonna A: Etichetta (es. “Clienti_VIP”)
- Colonna B: Modello da usare (es. “Promo_Natale”)

Scrittura del codice
- Clicca in alto su Estensioni > Apps Script.
- Cancella il codice predefinito (function myFunction() { … })
- incolla questo script:
function inviaEmailConAbbinamenti() {
const file = SpreadsheetApp.getActiveSpreadsheet();
const foglioDestinatari = file.getSheetByName("Destinatari");
const foglioModelli = file.getSheetByName("Modelli");
const foglioAbbinamenti = file.getSheetByName("Abbinamenti"); // Il nuovo foglio
// 1. Carica i MODELLI in memoria
const datiModelli = foglioModelli.getDataRange().getValues();
const dizionarioModelli = {};
for (let i = 1; i < datiModelli.length; i++) {
let nomeModello = datiModelli[i][0];
if (nomeModello !== "") {
dizionarioModelli[nomeModello] = {
oggetto: datiModelli[i][1],
corpo: datiModelli[i][2]
};
}
}
// 2. Carica gli ABBINAMENTI in memoria (Dizionario: Etichetta -> Nome Modello)
const datiAbbinamenti = foglioAbbinamenti.getDataRange().getValues();
const dizionarioAbbinamenti = {};
for (let i = 1; i < datiAbbinamenti.length; i++) {
let etichetta = datiAbbinamenti[i][0];
let modelloAssociato = datiAbbinamenti[i][1];
if (etichetta !== "") {
dizionarioAbbinamenti[etichetta] = modelloAssociato;
}
}
// 3. Leggi i DESTINATARI ed effettua l'invio incrociando i dati
const datiDestinatari = foglioDestinatari.getDataRange().getValues();
for (let i = 1; i < datiDestinatari.length; i++) {
let email = datiDestinatari[i][0];
let nome = datiDestinatari[i][1];
let cognome = datiDestinatari[i][2];
let etichettaContatto = datiDestinatari[i][3];
let stato = datiDestinatari[i][4];
if (email !== "" && etichettaContatto !== "" && stato !== "Inviato") {
// Trova quale modello usare per questa etichetta
let nomeModelloDaUsare = dizionarioAbbinamenti[etichettaContatto];
if (nomeModelloDaUsare) {
// Cerca il modello nei testi disponibili
let modelloScelto = dizionarioModelli[nomeModelloDaUsare];
if (modelloScelto) {
// Sostituisci i segnaposto
let oggettoPersonalizzato = modelloScelto.oggetto
.replace(/{{Nome}}/gi, nome)
.replace(/{{Cognome}}/gi, cognome);
let corpoPersonalizzato = modelloScelto.corpo
.replace(/{{Nome}}/gi, nome)
.replace(/{{Cognome}}/gi, cognome);
try {
GmailApp.sendEmail(email, oggettoPersonalizzato, corpoPersonalizzato);
foglioDestinatari.getRange(i + 1, 5).setValue("Inviato");
} catch (errore) {
foglioDestinatari.getRange(i + 1, 5).setValue("Errore: " + errore.message);
}
} else {
foglioDestinatari.getRange(i + 1, 5).setValue("Errore: Modello '" + nomeModelloDaUsare + "' non trovato in Modelli");
}
} else {
foglioDestinatari.getRange(i + 1, 5).setValue("Errore: Nessun abbinamento trovato per etichetta '" + etichettaContatto + "'");
}
}
}
}
// Questa funzione speciale viene eseguita in automatico ogni volta che apri il file
function onOpen() {
const ui = SpreadsheetApp.getUi();
// Crea un nuovo menu in alto
ui.createMenu('🚀 Script Email')
// Aggiunge la voce che fa partire la nostra funzione
.addItem('Invia Email con Abbinamenti', 'inviaEmailConAbbinamenti')
.addToUi();
}
- Clicca sull’icona del Floppy Disk in alto per salvare.
Preparazione contatti
Fase 1: Esportare i contatti da Google Workspace
- Vai su Google Contatti (contacts.google.com).
- Nel menu a sinistra, scorri fino alla sezione dei Contatti delegati e clicca sull’etichetta che vuoi esportare.
- In alto a destra, clicca sull’icona Esporta (quella con la freccia che punta verso l’alto o verso destra, a seconda della versione grafica).
- Scegli di esportare l’etichetta corrente e seleziona il formato CSV Google.
- Clicca su Esporta per scaricare il file sul tuo computer.

Fase 2: Importare i dati grezzi in un foglio temporaneo
- Apri il tuo file Google Fogli (quello con lo script).
- Clicca su File > Importa.
- Vai sulla scheda Carica e trascina (o seleziona) il file CSV appena scaricato.
- Nella finestra di importazione, alla voce “Posizione in cui importare”, scegli Inserisci un nuovo foglio (in modo da non sporcare il nostro foglio Destinatari).
- Clicca su Importa i dati.

Fase 3: Spostare i dati nel nostro formato
Ora hai un nuovo foglio pieno di colonne. Ecco quali prendere per riempire il nostro foglio Destinatari:
- Email: Nel foglio esportato, cerca la colonna chiamata E-mail 1 – Value (di solito è verso la fine). Copia tutta la colonna con gli indirizzi e incollala nella colonna A (Email) del tuo foglio Destinatari.
- Nome: Cerca la colonna Given Name. Copia e incolla nella colonna B (Nome).
- Cognome: Cerca la colonna Family Name. Copia e incolla nella colonna C (Cognome).
- Etichetta: Poiché hai appena esportato una specifica etichetta (es. “Clienti VIP”), non serve cercarla nel file grezzo. Vai nella colonna D (Etichetta) del tuo foglio Destinatari, scrivi “Clienti VIP” (o il nome esatto che hai usato nella tabella Abbinamenti) nella prima riga vuota e trascinala verso il basso per tutti i contatti.
- Stato: Lascia la colonna E (Stato) completamente vuota (ci penserà lo script a scriverci “Inviato”). A questo punto, puoi fare clic destro sul nome del foglio temporaneo in basso (quello importato col CSV) e cliccare su Elimina per mantenere il file pulito.
Se gestisci molte etichette diverse e pensi di fare questa operazione molto spesso, potremmo valutare di aggiungere una funzione al nostro script che prende il file CSV grezzo in un foglio e lo formatta automaticamente secondo le nostre regole.
Primo invio
- Cliccare su 🚀 Script Email nel menu.
- Google potrebbe chiederti l’autorizzazione per eseguire lo script. Segui la solita procedura (Continua -> Scegli l’account -> Avanzate -> Vai a…). Una volta data, non te la chiederà più.
- Cliccare su Invia Email con Abbinamenti.
Invio ordinario
- Cliccare su 🚀 Script Email nel menu.
- Cliccare su Invia Email con Abbinamenti.
- La colonna E (Stato) verrà popolata con “Inviato”

L’immagine di copertina è stata creata dall’autore con il supporto di strumenti di generazione assistita da intelligenza artificiale.

