Sauvegarder ses mails dans Drive

La question de sauvegarder vos emails et pièces jointes dans Google Drive est possible via un script. Après avoir lu une question sur le forum Gmail, voici une proposition pour répondre au besoin.



En ajoutant un déclencheur toutes les heures par exemple, le script ci dessous va scanner le libellé PDF dans Gmail pour

  • générer un PDF du mail,
  • récupérer les potentielles pièces joints
  • placer le tout dans le dossier "Mon Gmail"


function sauverGmailEnPDF() { 
  
  var libelleGmail  = "PDF";  
  var dossierDrive  = "Mon Gmail";
  
  var conversations = GmailApp.search("in:" + libelleGmail, 0, 5);  
  
  if (conversations.length > 0) {
    
    /* Dossier Google Drive où les fichiers seront sauvegardés */
    var dossiers = DriveApp.getFoldersByName(dossierDrive);
    var dossier = dossiers.hasNext() ? 
        dossiers.next() : DriveApp.createFolder(dossierDrive);
    
    /* Libellé Gmail contenant les emails à sauver */
    var label = GmailApp.getUserLabelByName(libelleGmail) ?     
        GmailApp.getUserLabelByName(libelleGmail) : GmailApp.createLabel(dossierDrive);
    
    for (var t=0; t<conversations.length; t++) {
      
      conversations[t].removeLabel(label);
      var msgs = conversations[t].getMessages();
      
      var html = "";
      var piecesJointes = [];
      
      var sujet = conversations[t].getFirstMessageSubject();
      
      /* Ajout de toutes les conversations d'un message dans un document HTML */
      for (var m=0; m<msgs.length; m++) {
        
        var msg = msgs[m];
        
        var laDate = LanguageApp.translate(msg.getDate(), 'en', 'fr');
        
        html += "De: " + msg.getFrom() + "<br />";  
        html += "A: " + msg.getTo() + "<br />";
        html += "Date: " + laDate + "<br />";
        html += "Sujet: " + msg.getSubject() + "<br />"; 
        html += "<hr />";
        html += msg.getBody().replace(/<img[^>]*>/g,"");
        html += "<hr />";
        
        var atts = msg.getAttachments();
        for (var a=0; a<atts.length; a++) {
          piecesJointes.push(atts[a]);
        }
      }
      
      /* Sauvegarde des fichiers joints et création des liens dans le pied de page du document. */
      if (piecesJointes.length > 0) {
        var piedDePage = "<strong>Pièces jointes:</strong><ul>";
        for (var z=0; z<piecesJointes.length; z++) {
          var fichier = dossier.createFile(piecesJointes[z]);
          piedDePage += "<li><a href='" + fichier.getUrl() + "'>" + fichier.getName() + "</a></li>";
        }
        html += piedDePage + "</ul>";
      }
      
      /* Convertir les fils de discussion en fichier PDF */
      var fichierTemporaire = DriveApp.createFile("temp.html", html, "text/html");
      dossier.createFile(fichierTemporaire.getAs("application/pdf")).setName(sujet + ".pdf");
      fichierTemporaire.setTrashed(true);
      
    }
  }
}  

Commentaires