Vous souhaitez accéder au dernier email d'un destinataire ou simplement envoyer un email, la classe GmailApp sera alors votre boite à outils. Avant de parcourir les fonctions de cette classe, il est préférable de comprendre la structure de GmailApp :
La boite mail est composée de fils de discussion
=> Un ensemble d'emails comprenant le même objet
Ce fil de discussion, qu'on appellera Thread, est donc composé d'emails. Ces emails peuvent alors avoir des pièces jointes
Les pièces jointes d'un mail sont contenus dans une liste de pièces jointes
La classe GmailApp est alors structurée comme suit :
La structure de GmailApp est définie, voici les principales fonctions de cette classe :
Cette fonction envoie un email avec des options (pièce jointe par exemple) et renvoie la classe GmailApp
// Envoie un email avec un fichier PDF en pièce jointe
var file =DriveApp.getFileById('1234ijklmnopqrstuvwxyz');
GmailApp.sendEmail('mike@example.com', 'Archive 2020', 'Voir pièce jointe.', {attachments: file.getAs(MimeType.PDF)],name: 'Archive 2020'});
Les options sont regroupées entre accolades et peuvent être liées aux pièces jointes, destinataires en copie ou encore à un envoi de mail en NoReply
Cette fonction permet de récupérer un tableau de fils de discussion (GmailThread) suivant des critères de recherche et des bornes (N° de fil de départ et nombre de fils)
Plus d'information sur les paramètres de recherche ici
// Renvoie la liste de fil de discussion avec un fichier csv en pièce jointe provenant de gsuite-noreply@google.com
// 0 signifie que l'on démarre au dernier fil de discussion
// 2 signifie qu'on ne récupère que les deux derniers fils de discussion
GmailApp.search('gsuite-noreply@google.com filename:csv ',0,2)
Cette fonction renvoie un tableau de fils de discussion (GmailThread) en partant d'un index de départ (start) avec une quantité de fils inférieure ou égale à un nombre donnée (max)
// Renvoie la liste des 50 derniers fils de discussion
// 0 signifie que l'on démarre au dernier fil de discussion
// 50 signifie qu'on ne récupère que les 50 derniers fils de discussion
var threads = GmailApp.getInboxThreads(0, 50);
Cette classe représente le fil de discussion. Nous allons donc voir quelle fonction récupère un email dans un fil :
Cette fonction récupère la liste des mails d'un fil de discussion et renvoie un tableau de type GmailMessage
// Récupération du dernier fil de discussion
// C'est un tableau donc on récupère l'item à l'index 0
var firstThread = GmailApp.getInboxThreads(0,1)[0];
// Récupération des emails de ce Thread/Fil
var messages = firstThread.getMessages();
// Récupération du 1er email du Thread/Fil
//(le mail le plus ancien)
var first_message=messages[0]
Une fois votre mail récupéré, vous pouvez utiliser les fonctions suivantes :
Cette fonction récupère les pièces jointes d'un email et renvoie un tableau de type GmailAttachement
// Récupération du dernier fil de discussion
// C'est un tableau donc on récupère l'item à l'index 0
var firstThread = GmailApp.getInboxThreads(0,1)[0];
// Récupération des emails de ce Thread
var messages = firstThread.getMessages();
// Récupération du 1er email du thread (le mail le plus ancien)
var first_message=messages[0]
// Récupération des pièces jointes de l'email
var pieces=first_message.getAttachements()
Une fois votre email récupéré, vous pouvez utiliser, si présente, la pièce jointe avec les fonctions de GmailAttachement :
Cette fonction renvoie une chaîne de caractères égale au nom de la pièce jointe
Cette fonction renvoie la pièce jointe sous format Blob. Ceci est utile pour utiliser les données de la pièce jointe où enregistrer cette dernière.
// Récupération du dernier fil de discussion
// C'est un tableau donc on récupère l'item à l'index 0
var firstThread = GmailApp.getInboxThreads(0,1)[0];
// Récupération des emails de ce Thread
var messages = firstThread.getMessages();
// Récupération du 1er email du thread
//(le mail le plus ancien)
var first_message=messages[0]
// Récupération des pièces jointes de l'email
var pieces=first_message.getAttachements()
//Récupération du nom de la pièce jointe
var name_piece=pieces[0].getName()
//Récupération du blob de la picèe jointe
var piece_blob=pieces[0].copyBlob()
// Enregistrement de la pièce jointe dans un dossier drive
DriveApp.getFolderbyId("u872u93oautii85").createFile(piece_blob)