Automatisez vos envois d’emails avec Google Sheets: créez, formatez, planifiez

L’envoi d’emails directement depuis Google Sheets peut considérablement simplifier vos communications.

Imaginez planifier des rappels, des newsletters ou des annonces régulières sans quitter votre feuille de calcul favorite.

Google Sheets, associé à Google Apps Script, rend tout cela non seulement possible mais aussi étonnamment simple.

Simplifiez la configuration

Premièrement, organisez votre feuille Google Sheets. Elle deviendra le tableau de bord d’où vous gérez les envois. Avec des validations de données et des configurations précises, vous préparez le terrain pour un processus fluide.

// Configurations centralisées
var CONFIG = {
  colonnes: {
    email: "A",
    objet: "B",
    corps: "C",
    activer: "D",
    recurrence: "E",
    datePremierEnvoi: "F",
    derniereDateEnvoi: "G"
  },
  validation: {
    activation: ["Oui", "Non"],
    recurrence: ["Tous les jours", "Du lundi au vendredi", "Une fois par semaine", "Une fois par mois", "Une fois par trimestre"]
  }
};

function configurerFeuille() {
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  if (feuille.getRange("A1").getValue() === "") {
    feuille.appendRow(["Email", "Objet", "Corps", "Activer/Désactiver", "Récurrence", "Date de premier envoi", "Dernière date d'envoi"]);
  }

  feuille.getRange("A1:G1").setFontWeight("bold");
  feuille.setFrozenRows(1);

  var validationActivation = SpreadsheetApp.newDataValidation()
                            .requireValueInList(CONFIG.validation.activation, true)
                            .setAllowInvalid(false)
                            .build();
  feuille.getRange(CONFIG.colonnes.activer + "2:" + CONFIG.colonnes.activer).setDataValidation(validationActivation);

  var validationRecurrence = SpreadsheetApp.newDataValidation()
                            .requireValueInList(CONFIG.validation.recurrence, true)
                            .setAllowInvalid(false)
                            .build();
  feuille.getRange(CONFIG.colonnes.recurrence + "2:" + CONFIG.colonnes.recurrence).setDataValidation(validationRecurrence);

  var validationDate = SpreadsheetApp.newDataValidation()
                      .requireDate()
                      .setAllowInvalid(false)
                      .build();
  feuille.getRange(CONFIG.colonnes.datePremierEnvoi + "2:" + CONFIG.colonnes.datePremierEnvoi).setDataValidation(validationDate);
  feuille.getRange(CONFIG.colonnes.derniereDateEnvoi + "2:" + CONFIG.colonnes.derniereDateEnvoi).setDataValidation(validationDate);
}

Dialogue de saisie intuitif

Introduisons ensuite une boîte de dialogue pour la rédaction de l’email. Ce petit formulaire HTML permet l’insertion et le formatage du texte. Ainsi, vous créez des messages personnalisés, que ce soit pour saluer, informer ou rappeler.

function afficherDialogueSaisieEmail() {
  var html = HtmlService.createHtmlOutputFromFile('PageSaisieEmail')
      .setWidth(400)
      .setHeight(300);
  SpreadsheetApp.getUi().showModalDialog(html, 'Saisir le corps de l\'email');
}


function insererCorpsEmailDansFeuille(corpsEmail) {
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = feuille.getActiveRange();
  var ligne = range.getRow();
  
  // Insère le corps de l'email dans la colonne C de la ligne sélectionnée
  feuille.getRange(ligne, 3).setValue(corpsEmail);
}
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <style>
      body {
        font-family: 'Google Sans', Roboto, Arial, sans-serif;
        padding: 16px;
        background-color: #fff;
      }
      textarea {
        width: 100%;
        padding: 8px;
        font-size: 14px;
        border: 1px solid #ccc;
        border-radius: 4px;
        box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
        margin-bottom: 16px;
      }
      button {
        background-color: #1a73e8;
        color: white;
        padding: 10px 24px;
        margin: 0 8px 0 0;
        border: none;
        border-radius: 4px;
        cursor: pointer;
        font-size: 14px;
      }
      button:hover {
        background-color: #0c63d6;
      }
    </style>
  </head>
  <body>
    <textarea id="corpsEmail" rows="10"></textarea><br>
    <button onclick="sauvegarderEtFermer()">Sauvegarder</button>
    
    <script>

function sauvegarderEtFermer() {
  var corpsEmail = document.getElementById('corpsEmail').value;
  // Convertit les sauts de ligne en paragraphes
  corpsEmail = corpsEmail.split('\n\n').map(function(paragraphe) {
    return '<p>' + paragraphe.replace(/\n/g, '<br>') + '</p>';
  }).join('');
  google.script.run
    .withSuccessHandler(function() {
      google.script.host.close();
    })
    .insererCorpsEmailDansFeuille(corpsEmail);
}

    </script>
  </body>
</html>

Envois planifiés et récurrents

Le vrai plus vient avec l’automatisation. Définissez la fréquence d’envoi sans effort. Que ce soit tous les jours, une fois par semaine ou selon toute autre cadence, vous assurez une communication régulière et sans faille.

function envoyerEmailsSelonRecurrenceEtPremierEnvoi() {
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = feuille.getRange("A2:G");
  var donnees = range.getValues();
  var dateAujourdhui = new Date();
  dateAujourdhui.setHours(0, 0, 0, 0);

  for (var i = 0; i < donnees.length; i++) {
    var ligne = donnees[i];
    var email = ligne[0];
    var objet = ligne[1];
    var corps = ligne[2];
    var activerEnvoi = ligne[3];
    var recurrence = ligne[4];
    var datePremierEnvoi = ligne[5] ? new Date(ligne[5]) : null;
    var derniereDateEnvoi = ligne[6] ? new Date(ligne[6]) : null;
   
    if (activerEnvoi.toLowerCase() === "oui" && email && datePremierEnvoi && dateAujourdhui >= datePremierEnvoi && doitEnvoyer(recurrence, dateAujourdhui, derniereDateEnvoi, datePremierEnvoi)) {
      if (envoyerEmailSecure(email, objet, corps)) {
        feuille.getRange(i + 2, 7).setValue(dateAujourdhui); // Mise à jour de la dernière date d'envoi
      }
    }
  }
}

function doitEnvoyer(recurrence, dateAujourdhui, derniereDateEnvoi, datePremierEnvoi) {
  if (!derniereDateEnvoi) return true; // Si jamais envoyé, envoyer maintenant
 
  var jourDeLaSemaine = dateAujourdhui.getDay(); // Dimanche = 0, Lundi = 1, ..., Samedi = 6
  var differenceJours = (dateAujourdhui - derniereDateEnvoi) / (1000 * 3600 * 24);
  var differenceSemaines = differenceJours / 7;
  var differenceMois = (dateAujourdhui.getFullYear() - derniereDateEnvoi.getFullYear()) * 12 + dateAujourdhui.getMonth() - derniereDateEnvoi.getMonth();
  var differenceTrimestres = Math.floor(differenceMois / 3);
 
  switch (recurrence.toLowerCase()) {
    case "tous les jours":
      return differenceJours >= 1;
    case "du lundi au vendredi":
      return differenceJours >= 1 && jourDeLaSemaine >= 1 && jourDeLaSemaine <= 5;
    case "une fois par semaine":
      return differenceSemaines >= 1 && dateAujourdhui.getDay() === datePremierEnvoi.getDay();
    case "une fois par mois":
      return differenceMois >= 1 && dateAujourdhui.getDate() === datePremierEnvoi.getDate();
    case "une fois par trimestre":
      return differenceTrimestres >= 1 && dateAujourdhui.getDate() === datePremierEnvoi.getDate() && ((dateAujourdhui.getMonth() - datePremierEnvoi.getMonth()) % 3 === 0);
    default:
      return false; // Ne pas envoyer si la récurrence n'est pas reconnue
  }
}

Envoi assuré et esthétique

Finalement, envoyez ces emails. Utilisez GmailApp pour bénéficier d’une mise en forme HTML. Vos messages arrivent non seulement à destination mais aussi avec le style souhaité.

function envoyerEmailSecure(email, objet, corpsHtml) {
  try {
    var options = {
      htmlBody: corpsHtml // Spécifie que le corps doit être traité comme du HTML
    };

    GmailApp.sendEmail(email, objet, "", options); // Le troisième argument est vide car nous utilisons htmlBody dans les options
    Logger.log("Email envoyé avec succès à " + email);
    return true;
  } catch (e) {
    Logger.log("Erreur lors de l'envoi à " + email + " : " + e.toString());
    return false;
  }
}

Ajoutons un menu à tout ça

Pour rendre notre système encore plus convivial, intégrons un menu personnalisé dans Google Sheets. Ce menu offre un accès rapide aux fonctions clés, telles que la configuration de la feuille, la saisie du corps de l’email, et la gestion des envois récurrents. En quelques clics, vous activez la boîte de dialogue de saisie, programmez vos emails et ajustez les paramètres sans jamais plonger dans le script.

Voici comment cela fonctionne : dès l’ouverture de votre feuille Google Sheets, un nouveau menu apparaît, baptisé « Gestion des E-mails ». Ce menu déroulant présente plusieurs options. Vous pouvez, par exemple, lancer immédiatement la configuration initiale de votre feuille ou ouvrir la boîte de dialogue pour rédiger un nouvel email. Plus encore, les options pour ajouter ou retirer des déclencheurs d’envois programmés se trouvent aussi ici, rendant l’ensemble du processus intuitif et à portée de main.

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Créer un nouveau menu
  ui.createMenu('Gestion des E-mails')
    .addItem('Configurer la Feuille', 'configurerFeuille')
    .addItem('Saisir Corps Email', 'afficherDialogueSaisieEmail')
    .addItem('Ajouter Déclencheur Quotidien', 'ajouterDeclencheurQuotidien')
    .addItem('Retirer Déclencheur Quotidien', 'retirerDeclencheurQuotidien')
    .addToUi();
}

Cette petite touche finale transforme votre feuille de calcul en une véritable application de gestion d’emails, où la facilité d’utilisation prime. Non seulement vous bénéficiez d’une solution puissante pour vos communications, mais elle est aussi conçue pour être accessible à tous, indépendamment de leur niveau technique.

Pourquoi adopter cette méthode ?

Cette stratégie libère du temps. Finie la répétition laborieuse d’envois manuels. De plus, elle ouvre la voie à des communications plus riches et mieux structurées. Adopter cette méthode, c’est choisir l’efficacité et l’impact.

Conclusion

En somme, Google Sheets se révèle être plus qu’un simple outil de gestion de données. Il devient un compagnon de communication, capable d’envoyer des emails formatés et planifiés avec aisance. Cette approche propose une évolution dans la gestion des tâches répétitives, offrant une solution à la fois élégante et pratique pour les professionnels de tous secteurs.

Afin de partager au maximum les bénéfices de cette méthode, j’ai décidé de mettre le fichier complet du script, accompagné d’instructions détaillées, en libre accès. Je suis convaincu que cette ressource sera d’une grande aide pour tous ceux qui cherchent à apprendre le développement Apps Script.

Si vous trouvez ce script utile et souhaitez soutenir mon travail et la création de futurs projets similaires, j’apprécierais grandement votre contribution volontaire via PayPal. Chaque soutien, petit ou grand, contribue énormément et permet de maintenir ce blog de partage et d’innovation.

Pour soutenir le projet, veuillez cliquer ici.

Un immense merci à tous pour votre soutien et votre confiance. Ensemble, continuons à explorer de nouvelles façons d’améliorer nos méthodes de travail et de communication.

2 réflexions au sujet de “Automatisez vos envois d’emails avec Google Sheets: créez, formatez, planifiez”

Laisser un commentaire