Facciamo subito una precisazione, che non dev'essere spam dato che comunque oggi i provider email sono sempre più evoluti e la pratica - inutile - nemmeno avrebbe successo. Lo scopo è invece quello, ad esempio per un'azienda, di contattare direttamente i clienti tramite un'integrazione con il calendario di Google. Concettualmente, partiamo da questo presupposto:
- oggi la mia azienda vende un elettrodomestico (es. caldaia) ad un cliente
- a distanza di un tempo prefissato (es. un anno) è opportuno programmare la manutenzione
- su Google Calendar salvo l'evento con le info per contattare il cliente
- anziché dover svolgere l'operazione manualmente, con Google Calendar e Google Script possiamo automatizzare la cosa (non abbiamo ufficialmente accesso diretto a WhatsApp o SMS, salvo integrazione con sofwtare di terze parti, mentre per l'invio di email la soluzione è più semplice).
Vediamo quindi come funziona.
- su Google Calendar (calendar.google.com) andiamo a creare un evento con titolo e descrizione: nella descrizione mettiamo SOLO l'indirizzo email del destinatario, mentre nel titolo quello che vogliamo compaia
- ora viene la parte più complicata ma basta seguire i passaggi:
- andiamo su Google Apps Script (script.google.com)
- crea nuovo progetto
- nel codice.gs inseriamo questo:
function sendEmailReminder() { const calendar = CalendarApp.getDefaultCalendar(); const now = new Date(); Logger.log(`🕒 Ora attuale: ${now}`); // Recupera tutti gli eventi di oggi const events = calendar.getEventsForDay(now); Logger.log(`📅 Eventi trovati: ${events.length}`); if (events.length === 0) { Logger.log("❌ Nessun evento trovato per oggi."); return; } events.forEach(event => { Logger.log(`📌 Titolo evento: ${event.getTitle()}`); Logger.log(`⏰ Orario inizio: ${event.getStartTime()}`); Logger.log(`📖 Descrizione: ${event.getDescription()}`); // Cerca un indirizzo email valido ovunque nella descrizione const emailMatch = event.getDescription().match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/); if (!emailMatch) { Logger.log("❌ Nessuna email trovata nella descrizione."); return; // Salta se l'email non è presente } const email = emailMatch[0].trim(); Logger.log(`✅ Email trovata: ${email}`); // Calcola l'orario del reminder (30 minuti prima) const startTime = event.getStartTime(); const reminderTime = new Date(startTime.getTime() - 30 * 60000); Logger.log(`🕓 Orario promemoria: ${reminderTime}`); // Invia l'email se è il momento giusto if (now >= reminderTime && now < startTime) { const subject = `🔔 Promemoria: ${event.getTitle()}`; const message = `Ciao! Ti ricordo l'evento "${event.getTitle()}" oggi alle ${startTime.toLocaleTimeString()}.`; MailApp.sendEmail(email, subject, message); Logger.log(`📧 Email inviata a: ${email}`); } else { Logger.log("⏳ Non è ancora il momento di inviare l'email."); } }); }
- eventualmente personalizziamo la stringa del messaggio da inviare, che ora è predefinito: "Ciao! Ti ricordo l'evento [...] oggi alle [...]"
- attivatori, aggiungi attivatore: sendEmailReminder, evento vincolato a specifiche temporali, timer orario: ogni ora; prima di salvare ci viene richiesto il login con account Google (per dimostrare l'integrazione con Google Calendar)
- ora per verifica, possiamo eseguirlo manualmente (magari con un nostro evento di prova) e vedere il log di esecuzione, se ha funzionato correttamente
- con alcuni provider mail, potrebbero esserci problemi nel caso l'indirizzo mittente - collegato all'account Google - non sia nativo Gmail dato che ci si aspetta (nel mio caso ho usato un account Outlook Mail come mittente, a Gmail è arrivato correttamente mentre a Yahoo Mail l'inivio è fallito); quindi senza ricorrere ad esempio soluzioni SMTP di terze parti, impostare un account Gmail come mittente dovrebbe funzionare senza questo problema
Vediamo un'immagine che riassume i vari step.