Ne plus oublier son message d’absence dans Gmail

Avez vous déjà oublié d’activer votre message automatique d’absence sur Gmail avant de partir en congé ? Si oui, je vous propose ce script permettant en lisant votre agenda de le positionner automatiquement afin de ne plus jamais oublier cette tâche.

Une automatisation simple mais puissante avec Apps Script

Étant un grand fan de Google Apps Script, j’étais convaincu qu’il y avait un moyen d’automatiser cette tâche pour éviter d’oublier d’activer le message automatique d’absence de Gmail.

J’ai créé un script autonome qui utilise les services avancés de l’API Google Agenda et de l’API Gmail. Le programme recherche les événements de type Absent du bureau et fonction des dates positionne le message d’absence.

Étapes de l’automatisation

  1. Récupération des Événements de Type ‘OutOfOffice’ :
    Le script récupère tous les événements de type ‘OufOfOffice’ pour le jour en cours. Si de tels événements existent et ont ‘Absent du bureau’ comme résumé (texte par défaut), la fonction appelle activerRepondeurAutomatique_().
  2. Vérification et Activation du Répondeur Automatique :
    La fonction activerRepondeurAutomatique_() vérifie d’abord si le message automatique d’absence est déjà activé pour éviter des activations répétitives inutiles. Si le répondeur n’est pas activé, la fonction le configure dans les paramètres de Gmail.

Exemple de code

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Fonction pour obtenir les événements de type "outOfOffice" du jour en cours
function obtenirEvenementsAbsence() {
// ID du calendrier principal
const idCalendrier = 'primary';
// Paramètres optionnels pour la requête des événements
const options = {
eventTypes: ['outOfOffice'],
showDeleted: false, // Ne pas montrer les événements supprimés
timeMin: obtenirDateEtHeure_(0, 1), // Heure de début : 00:01
timeMax: obtenirDateEtHeure_(23, 59), // Heure de fin : 23:59
};
// Récupération de la réponse de la liste des événements
const reponse = Calendar.Events.list(idCalendrier, options);
// Vérifie si des événements sont trouvés
if (reponse.items && reponse.items.length > 0) {
// Parcourt les événements pour vérifier le type et le résumé
for (let evenement of reponse.items) {
if (evenement.eventType === 'outOfOffice' && evenement.summary === 'Absent du bureau') {
activerRepondeurAutomatique_(); // Activer le répondeur automatique
break; // Sort dès qu'un événement "outOfOffice" est trouvé
}
}
}
}
// Fonction pour obtenir la date et l'heure au format requis
function obtenirDateEtHeure_(heure, minutes) {
const date = new Date();
date.setHours(heure);
date.setMinutes(minutes);
date.setSeconds(0);
date.setMilliseconds(0);
return date.toISOString(); // Retourne la date et l'heure en format ISO
}
// Fonction pour activer le répondeur automatique
function activerRepondeurAutomatique_() {
// Récupérer le statut actuel du répondeur automatique
const statutRepondeur = Gmail.Users.Settings.getVacation('me');
// Si le répondeur automatique n'est pas activé
if (!statutRepondeur.enableAutoReply) {
// Mettre à jour les paramètres du répondeur automatique
Gmail.Users.Settings.updateVacation({
enableAutoReply: true, // Activer le répondeur automatique
responseSubject: 'Je suis absent du bureau aujourd\'hui', // Sujet de réponse
responseBodyHtml: "Bonjour,<br><br>Je suis actuellement absent du bureau et ne pourrai pas répondre à vos emails jusqu'à mon retour. Si votre demande est urgente, veuillez contacter un membre de mon équipe ou utiliser notre numéro de contact général.<br><br>Merci de votre compréhension et à bientôt.<br><br>Cordialement,<br>[Votre Nom]", // Corps du message de réponse
restrictToContacts: true, // Restreindre aux contacts
restrictToDomain: true, // Restreindre au domaine
}, 'me');
}
}
// Fonction pour obtenir les événements de type "outOfOffice" du jour en cours function obtenirEvenementsAbsence() { // ID du calendrier principal const idCalendrier = 'primary'; // Paramètres optionnels pour la requête des événements const options = { eventTypes: ['outOfOffice'], showDeleted: false, // Ne pas montrer les événements supprimés timeMin: obtenirDateEtHeure_(0, 1), // Heure de début : 00:01 timeMax: obtenirDateEtHeure_(23, 59), // Heure de fin : 23:59 }; // Récupération de la réponse de la liste des événements const reponse = Calendar.Events.list(idCalendrier, options); // Vérifie si des événements sont trouvés if (reponse.items && reponse.items.length > 0) { // Parcourt les événements pour vérifier le type et le résumé for (let evenement of reponse.items) { if (evenement.eventType === 'outOfOffice' && evenement.summary === 'Absent du bureau') { activerRepondeurAutomatique_(); // Activer le répondeur automatique break; // Sort dès qu'un événement "outOfOffice" est trouvé } } } } // Fonction pour obtenir la date et l'heure au format requis function obtenirDateEtHeure_(heure, minutes) { const date = new Date(); date.setHours(heure); date.setMinutes(minutes); date.setSeconds(0); date.setMilliseconds(0); return date.toISOString(); // Retourne la date et l'heure en format ISO } // Fonction pour activer le répondeur automatique function activerRepondeurAutomatique_() { // Récupérer le statut actuel du répondeur automatique const statutRepondeur = Gmail.Users.Settings.getVacation('me'); // Si le répondeur automatique n'est pas activé if (!statutRepondeur.enableAutoReply) { // Mettre à jour les paramètres du répondeur automatique Gmail.Users.Settings.updateVacation({ enableAutoReply: true, // Activer le répondeur automatique responseSubject: 'Je suis absent du bureau aujourd\'hui', // Sujet de réponse responseBodyHtml: "Bonjour,<br><br>Je suis actuellement absent du bureau et ne pourrai pas répondre à vos emails jusqu'à mon retour. Si votre demande est urgente, veuillez contacter un membre de mon équipe ou utiliser notre numéro de contact général.<br><br>Merci de votre compréhension et à bientôt.<br><br>Cordialement,<br>[Votre Nom]", // Corps du message de réponse restrictToContacts: true, // Restreindre aux contacts restrictToDomain: true, // Restreindre au domaine }, 'me'); } }
// Fonction pour obtenir les événements de type "outOfOffice" du jour en cours
function obtenirEvenementsAbsence() {
  // ID du calendrier principal
  const idCalendrier = 'primary';
  
  // Paramètres optionnels pour la requête des événements
  const options = {
    eventTypes: ['outOfOffice'], 
    showDeleted: false, // Ne pas montrer les événements supprimés
    timeMin: obtenirDateEtHeure_(0, 1), // Heure de début : 00:01
    timeMax: obtenirDateEtHeure_(23, 59), // Heure de fin : 23:59
  };

  // Récupération de la réponse de la liste des événements
  const reponse = Calendar.Events.list(idCalendrier, options);

  // Vérifie si des événements sont trouvés
  if (reponse.items && reponse.items.length > 0) {
    // Parcourt les événements pour vérifier le type et le résumé
    for (let evenement of reponse.items) {
      if (evenement.eventType === 'outOfOffice' && evenement.summary === 'Absent du bureau') {
        activerRepondeurAutomatique_(); // Activer le répondeur automatique
        break; // Sort dès qu'un événement "outOfOffice" est trouvé
      }
    }
  }
}

// Fonction pour obtenir la date et l'heure au format requis
function obtenirDateEtHeure_(heure, minutes) {
  const date = new Date();
  date.setHours(heure);
  date.setMinutes(minutes);
  date.setSeconds(0);
  date.setMilliseconds(0);
  return date.toISOString(); // Retourne la date et l'heure en format ISO
}

// Fonction pour activer le répondeur automatique
function activerRepondeurAutomatique_() {
  // Récupérer le statut actuel du répondeur automatique
  const statutRepondeur = Gmail.Users.Settings.getVacation('me');

  // Si le répondeur automatique n'est pas activé
  if (!statutRepondeur.enableAutoReply) {
    // Mettre à jour les paramètres du répondeur automatique
    Gmail.Users.Settings.updateVacation({
      enableAutoReply: true, // Activer le répondeur automatique
      responseSubject: 'Je suis absent du bureau aujourd\'hui', // Sujet de réponse
      responseBodyHtml: "Bonjour,<br><br>Je suis actuellement absent du bureau et ne pourrai pas répondre à vos emails jusqu'à mon retour. Si votre demande est urgente, veuillez contacter un membre de mon équipe ou utiliser notre numéro de contact général.<br><br>Merci de votre compréhension et à bientôt.<br><br>Cordialement,<br>[Votre Nom]", // Corps du message de réponse
      restrictToContacts: true, // Restreindre aux contacts
      restrictToDomain: true, // Restreindre au domaine
    }, 'me');
  }
}

Penser également au fichier manifeste.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{
"timeZone": "Europe/Paris",
"dependencies": {
"enabledAdvancedServices": [
{
"userSymbol": "Calendar",
"version": "v3",
"serviceId": "calendar"
},
{
"userSymbol": "Gmail",
"version": "v1",
"serviceId": "gmail"
}
]
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}
{ "timeZone": "Europe/Paris", "dependencies": { "enabledAdvancedServices": [ { "userSymbol": "Calendar", "version": "v3", "serviceId": "calendar" }, { "userSymbol": "Gmail", "version": "v1", "serviceId": "gmail" } ] }, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8" }
{
 "timeZone": "Europe/Paris",
 "dependencies": {
   "enabledAdvancedServices": [
     {
       "userSymbol": "Calendar",
       "version": "v3",
       "serviceId": "calendar"
     },
     {
       "userSymbol": "Gmail",
       "version": "v1",
       "serviceId": "gmail"
     }
   ]
 },
 "exceptionLogging": "STACKDRIVER",
 "runtimeVersion": "V8"
}

Configuration de la tâche planifiée

Pour que le script s’exécute tous les jours, j’ai configuré un déclencheur temporel qui s’exécute quotidiennement entre 4h et 5h du matin. J’ai également choisi d’être immédiatement notifiée en cas d’échec du script, pour une efficacité maximale.

  • 1. Ouvrez l’IDE Apps Script.
  • 2. Allez dans Éditeur > Déclencheurs et créez un nouveau déclencheur.
  • 3. Sélectionnez la fonction obtenirEvenementsAbsence.
  • 4. Définissez l’intervalle de temps pour qu’il s’exécute quotidiennement entre 4h et 5h du matin.

Importance de cette automatisation

Cette petite automatisation montre le potentiel plus large de Google Apps Script. Elle témoigne de la puissance de la personnalisation et de la capacité à adapter nos environnements numériques à nos besoins spécifiques.


L’Atelier Informatique vous accompagne dans vos projets technologiques en vous proposant des tutoriels et des solutions pour optimiser vos tâches quotidiennes.