Un problema classico: la casella si riempie di newsletter, notifiche di piattaforme e ricevute automatiche. In mezzo, si perdono le poche email scritte da persone reali che aspettano una risposta.
Questo tutorial crea un report giornaliero con un approccio fuzzy: invece di indovinare attraverso parole chiave, è Gemini a leggere il contenuto e decidere cosa merita davvero una risposta umana. Il tutto gira in autonomia ogni mattina con Google Apps Script.
Tutti gli indirizzi, nomi e dati personali mostrati qui sono placeholder, ad esempio
[email protected].
Il punto di partenza: chiedere a Gemini dentro Gmail
Dentro l'app Gemini puoi interrogare la posta attivando l'estensione Google Workspace e anteponendo @Gmail alla richiesta:
@Gmail cerca le mail a cui non ho risposto
Funziona per una ricerca interattiva al volo, ma non sempre distingue bene una persona reale da una piattaforma. Soprattutto, non puoi pianificarla: Gemini in chat risponde solo a un comando diretto.
Per automatizzare, spostiamo la logica in Google Apps Script: può avviarsi su un timer quotidiano e delegare a Gemini la parte intelligente.
L'idea: ricerca fuzzy con Gemini
Gemini legge il contenuto di ogni email recente e seleziona solo quelle che sembrano scritte da una persona e richiedono una tua azione.
Il modello coglie il contesto — tono confidenziale, domanda esplicita, notifica automatica mascherata da testo normale — senza limitarsi a cercare parole spia.
- Raccoglie le email delle ultime 24 ore e scarta i thread a cui hai già risposto.
- Estrae un breve frammento del corpo di ogni messaggio.
- Chiede a Gemini un JSON con le email da seguire e il relativo motivo.
- Compone il report e te lo invia via email.
Crea una chiave API gratuita
- Vai su aistudio.google.com con il tuo account Google.
- Seleziona Get API Key → Create API Key e copia la chiave generata.
Salva la chiave senza scriverla nel codice
In script.google.com crea un progetto e apri le Impostazioni progetto. In fondo alla pagina scegli Proprietà dello script → Aggiungi proprietà, quindi salva:
- Nome:
GEMINI_KEY - Valore: la chiave appena creata
Così il segreto rimane nelle proprietà del progetto e non finisce nel codice.
Incolla il codice
Sostituisci [email protected] con l'indirizzo a cui vuoi ricevere il report, poi incolla questo script nell'editor.
function inviaRiepilogoEmailConGemini() {
const DESTINATARIO_REPORT = "[email protected]";
const threads = GmailApp.search("newer_than:1d");
const emailDaAnalizzare = [];
for (let i = 0; i < threads.length; i++) {
const thread = threads[i];
const messaggi = thread.getMessages();
const ultimo = messaggi[messaggi.length - 1];
const mittente = ultimo.getFrom();
// Salta il thread se l'ultimo messaggio è stato inviato da te.
if (mittente.includes(GmailApp.getAliases()[0]) ||
mittente.includes(Session.getActiveUser().getEmail())) continue;
emailDaAnalizzare.push({
id: i, mittente, oggetto: ultimo.getSubject(),
estratto: ultimo.getPlainBody().substring(0, 1500),
link: thread.getPermalink()
});
}
if (!emailDaAnalizzare.length) return;
const prompt = `Analizza queste email ricevute nelle ultime 24 ore.
Identifica SOLO quelle scritte da persone reali che richiedono una risposta,
un'azione o attenzione da parte mia. Escludi newsletter, marketing, ricevute,
notifiche automatiche e messaggi generici da bot.
Rispondi ESCLUSIVAMENTE con JSON valido in questo formato:
[{"id": 0, "motivo": "una riga sul perché rispondere"}]
Email: ${JSON.stringify(emailDaAnalizzare, null, 2)}`;
const apiKey = PropertiesService.getScriptProperties().getProperty("GEMINI_KEY");
if (!apiKey) throw new Error("GEMINI_KEY non trovata");
const response = UrlFetchApp.fetch(
`https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${apiKey}`,
{ method: "POST", contentType: "application/json",
payload: JSON.stringify({ contents: [{ parts: [{ text: prompt }] }],
generationConfig: { responseMimeType: "application/json" } }) }
);
const selezionate = JSON.parse(JSON.parse(response.getContentText())
.candidates[0].content.parts[0].text);
if (!selezionate.length) return;
let corpo = "Ciao,\n\nEmail da persone reali in attesa di risposta:\n\n";
selezionate.forEach((sel, idx) => {
const e = emailDaAnalizzare.find(x => x.id === sel.id);
if (e) corpo += `${idx + 1}. Da: ${e.mittente}\n Oggetto: ${e.oggetto}\n Contesto: ${sel.motivo}\n Rispondi: ${e.link}\n\n`;
});
GmailApp.sendEmail(DESTINATARIO_REPORT,
`[Report Smart] ${selezionate.length} email a cui rispondere`, corpo);
}
Pianifica l'esecuzione giornaliera
Per far partire lo script automaticamente ogni mattina, senza aprire nulla:
- Nel pannello Apps Script, fai clic sull'icona Attivatori (sveglia/orologio) nella barra laterale.
- In basso a destra scegli + Aggiungi attivatore.
- Come funzione seleziona
inviaRiepilogoEmailConGemini. - Imposta sorgente Sulla base del tempo, tipo Timer giornaliero e la fascia oraria desiderata, per esempio 07:00–08:00.
- Salva e concedi le autorizzazioni necessarie per Gmail e l'invio email. Se appare l'avviso di app non verificata, scegli Avanzate → Apri [nome progetto].
Da questo momento Google eseguirà lo script ogni giorno e ti recapiterà il report.
Note pratiche
- Costi e limiti: il piano gratuito di AI Studio è adatto a volumi contenuti; per molte email, verifica le quote correnti.
- Privacy: invii estratti della posta alle API Google AI Studio. Valuta con attenzione i contenuti sensibili.
- Finestra temporale:
newer_than:1dguarda le ultime 24 ore; coordinane l'uso con l'orario del trigger. - Falsi positivi e negativi: è un promemoria, non un sistema di ticketing. Affina il prompt sui tuoi pattern reali.
- Risposte già inviate: il controllo osserva l'ultimo messaggio del thread; risposte inviate fuori Gmail non vengono viste.