skip to Main Content

Google Apps Script : Envoyer un document Google Doc par mail en pièce jointe

Ce script vous sera bien utile si vous avez rédigé un document depuis Google Doc (de la suite des outils Google), et que vous souhaitez l’envoyer par email sous la forme d’une pièce jointe.

L’email utilisé provient de Mailchimp mais vous pouvez configurer n’importe quel SMTP. Une demande d’autorisation devra être acceptée la toute première fois lors de l’exécution du script par mesure de sécurité.

/**
 * Envoi un email en utilisant le contenu du document Google doc comme corps d'email
 */
function sendDocument(documentId, recipient, subject) {
  var html = convertToHtml(documentId);
  html = inlineCss(html);
  GmailApp.sendEmail(recipient, subject, null, {
    htmlBody: html
  });
}

/**
 *  Le service avancé de Drive (Advanced Drive Service) doit être activé pour pouvoir utiliser cette fonction
 */
function convertToHtml(fileId) {
  var file = Drive.Files.get(fileId);
  var htmlExportLink = file.exportLinks['text/html'];
  if (!htmlExportLink) {
    throw 'File cannot be converted to HTML.';
  }
  var oAuthToken = ScriptApp.getOAuthToken();
  var response = UrlFetchApp.fetch(htmlExportLink, {
    headers:{
      'Authorization': 'Bearer ' + oAuthToken
    },
    muteHttpExceptions: true
  });
  if (!response.getResponseCode() == 200) {
    throw 'Error converting to HTML: ' + response.getContentText();
  }
  return response.getContentText();
}

/**
 * L'API Mailchimp converti le CSS. Pour utiliser cette API vous devez
 * vous inscrire en créant un compte et en activant votre clé API 
 * "mailchimp.apikey". Cliquez ici pour plus d'infos sur les clés API :
 * http://kb.mailchimp.com/article/where-can-i-find-my-api-key/.
 */
function inlineCss(html) {
  var apikey = CacheService.getPublicCache().get('mailchimp.apikey');
  if (!apikey) {
    apikey = PropertiesService.getScriptProperties().getProperty('mailchimp.apikey');
    CacheService.getPublicCache().put('mailchimp.apikey', apikey);
  }
  var datacenter = apikey.split('-')[1];
  var url = Utilities.formatString('https://%s.api.mailchimp.com/2.0/helper/inline-css', datacenter);
  var response = UrlFetchApp.fetch(url, {
    method: 'post',
    payload: {
      apikey: apikey,
      html: html,
      strip_css: true
    }
  });
  var output = JSON.parse(response.getContentText());
  if (!response.getResponseCode() == 200) {
    throw 'Error inlining CSS: ' + output['error'];
  }
  return output['html'];
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Back To Top