MON 2 : Google Apps Script

Tags :
  • MON
  • 2022-2023
  • temps 1
  • google apps script
  • automatisation
Auteurs :
  • Thomas Pont

Google Apps Script

Objectif de ce MON

L'objectif de ce MON est d'automatiser une tâche avec Google App Script.

Ici on cherchera à automatiser l'envoi de mails personnalisés. à des personnes.

Pour cela, on va réaliser un programme qui va automatiser l'envoi de mail lors de l'organisation d'évènements (réunions, cours..). A la fin, il faudrait que l'on ait juste à indiquer dans un Google Sheet, le prénom, le nom, le mail du participant ainsi que la nature, la date et l'heure de l'évènement auquel il est convié et qu'un mail comme celui qui suit s'envoie automatiquement.

Bonjour Jean Dupont,

Vous êtes conviés à la réunion de fin de projet le 24/10/2022 à 15h.

Cordialement,
Yves Martin

Réalisation de ce programme

Dans un premier temps, j'ai relu et étudié les précédents MON fait sur Google App Script pour revoir les principales fonctionnalités déjà utilisé et principalement celle de l'envoi de mail.

Fichier texte

Pour commencer on crée un Google Doc avec le texte que l'on souhaite envoyer aux différents destinataires du mail.

 Bonjour [Prenom] [Nom],

 Vous êtes conviés [Evenement] le [Date] à [Heure].

 Cordialement,
 Yves Martin

Les éléments entre crochets seront ensuite automatiquement remplacé en fonction des informations sur la personne et sur l'évènement.

On doit ensuite convertir ce texte en HTML pour qu'il puisse être bien envoyé. Pour cela, on récupère une fonction publique disponible sur ce Github. On nomme le texte ainsi converti mailBodyHTML

Google Sheet

On crée un Google Sheet permettant de réunir les éléments des mails que l'on doit envoyer. On le place dans un onglet intitulé Inscriptions.

Nom Prénom Mail Date Heure Nom Evènement
Dupont Jean jean.dupont@gmail.com 24/10/2022 15h à la réunion de fin de projet
Dulieu Anna anna.dulieu@gmail.com 24/10/2022 15h à la réunion de fin de projet

Personnalisation du mail

Il faut ensuite qu'on écrive un script qui prend les informations du tableau et qui complète automatiquement le texte du mail.

Dans une fonction, on extrait les données du tableau de cette manière :

const nom = inscriptions[i][0];
const prenom = inscriptions[i][1];
const email = inscriptions[i][2];
const date = new Date(inscriptions[i][3]);
const dateFormatee = Utilities.formatDate(date, "GMT+1", "dd/MM/YYYY");
const heure = inscriptions[i][4];
const sujet = inscriptions[i][5];

Attention aux dates

Il faut faire attention à la gestion des dates dans le tableau. Si on fait seulement

const date = inscriptions [i][3];

rien ne sera extrait du tableau De même si on formate pas la date on récupère également l'heure de minuit ainsi que le fuseau horaire de là où on se situe. Il est donc important de bien l'extraire et de bien la formater.

On place toutes ses données ainsi récupérées dans un tableau variables. Pour compléter le texte on utilise la fonction suivante :

  for(const id in variables)
  {
    if(variables.hasOwnProperty(id)) {
      mailBodyHTML = mailBodyHTML.replace("["+id+"]",variables[id]);
    }
  }

Ceci permet de lire le texte du mail et de remplacer les [] par l'information correspondante.

Envoi du mail

Il faut maintenant lier les scripts pour le texte ainsi former puisse être envoyé et qu'il le soit à la bonne personne.

Pour cela, on peut utiliser la commande ci-dessous :

MailApp.sendEmail(mailTo, mailSubject, mailBodyHTML.replace(/<[^>]*>/g, ''), options);

On peut choisir l'intitulé tel que Convocation qu'on peut stocker dans une constante.

On peut retrouver ici le tableau avec le Google App Script final. L'envoi du mail se fait lorsqu'on l'on lance la fonction gestionConvocations.

Ainsi on peut lancer manuellement cette fonction et le bon mail s'enverra à Jean et Anna. Il reste cependant un problème. Si on décide d'envoyer ce mail à quelqu'un d'autre, qu'on rajoute cette personne dans le tableau, le mail se renverra également à Jean et Anna. Pour pallier à ce problème on peut ajouter une colonne intitulée Mail envoyé. On place des cases non cochées dans ce tableau. Lorsque le mail est bien envoyé un ajoute une ligne dans le code pour que la case soit cochée.

inscriptionsSheet.getRange(i+1,7).setValue("TRUE");

Si on relance le script, en vérifiant si la case est bien décochée, seules les lignes non cochées vont recevoir le mail.

Lien vers le code

Mon code