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.
