Eléments d'un mail vers tableau GSheet

Bonjour,

Je vous explique mon workflow pour que compreniez l'automatisation que je voudrais établir.

J'ai des commerciaux qui m'envoient des mails de demandes d'offres et je dois établir des tableaux sur GSheet et leur renvoyer. Seulement j'ai une flemme considérable de tout copier coller à chaque fois ... Et je voulais savoir si c'était possible qu'à partir d'un mail (en supposant que la forme du mail soit toujours la même), on peut créer automatiquement un document GSheet avec les éléments du mails placés dans des cellules précises. Je précise que nous n'utilisons pas Gmail pour l'envoie de nos mails pro.

L'idée serait la suivante :

Le commercial nous envoie un mail type :

Objet : Demande d'Offre TESLA

Corps du mail :

SIRET : 52433526200084
Raison Sociale : TESLA
Dirigeant :
Elon Musk
Mail :
elon@tesla.com
Tél :
0611223344

Dès réception de ce mail, un document Gsheet est créé automatiquement avec comme nom TESLA (idéalement il faudrait que le fichier créé soit une copie d'un template déjà existant) et ensuite dans des cellules précises mettre les informations correspondantes.

Par exemple en cellule
B1 : 52433526200084 (aller récupérer information SIRET du mail)
B2 : TESLA (aller récupérer information Raison Sociale du mail)
B3 : Elon Musk (aller récupérer information Dirigeant du mail)
B4 : elon@tesla.com (aller récupérer information Mail du mail)
B6 : 0611223344 (aller récupérer information Tel du mail)

Ma question : Est-ce que vous pensez que c'est possible ? Si oui, quels sont les pré-requis (dois je par exemple basculer sur Google Workspace ?) et aussi quel serait la méthode d'automatisation car je suppose qu'il faut passer par un service peut être Zappier ou un autre service ? Ou est-ce possible de le faire directement via App Scripts ?

Le cas échéant où ce n'est pas possible ou si ça parait trop compliqué, peut être résoudre le problème de manière inverse, c'est à dire qu'au lieu que le fichier soit créé automatiquement à partir du mail, que je créé le fichier manuellement et à partir du fichier Gsheet, aller récupérer les éléments du mail.

Voilà l'idée, si je résume :

Réception d'un mail -> Création automatique d'un GSheet avec les éléments du mail.

OU

Réception d'un mail -> Création manuel du GSheet -> Récupération automatique des éléments du mail.

Merci.

Bonjour,

La meilleure solution pour éviter un copier/coller est d'utiliser gmail.

Néanmoins, si on accepte de faire un copier/coller manuel dans une cellule, il est possible d'en extraite des informations et les ranger dans des cellules de GSheets, soit par formule, soit pas script.

Exemple (paramètres en bleu, formule unique en jaune)

=arrayformula(substitute(split(A2;char(10));B1:F1;""))

Les paramètres contiennent un espace après :

image

Super, c'est une première piste.

Admettons que je switche sur gmail, sais-tu comment procéder pour éviter le c/c ?

Il faudra sans doute sélectionner les messages en arrivée, et éviter les doublons.Gmail permet d'affecter automatiquement un libellé (label) quand un message entre afin de l'identifier, cela peut être une façon de capter les seuls messages intéressants ici. Sinon on utilisera un moteur de recherche comme ici https://support.google.com/mail/answer/7190?hl=fr en s'appuyant sur des critères comme is:unread et/ou from:xxxxxxx@gmail.com et/ou in:inbox

Gmail gère par défaut des conversations (threads) et des messages dépendant de conversations.

Un exemple d'extraction ... messages non lus dans la boite de réception en provenance d'une adresse particulière (ces messages sont ensuite marqués lus en fin de script)

function mail() {
  var requete ="is:unread in:inbox from:machin@gmail.com"
  var ss = SpreadsheetApp.getActive().getSheetByName("maFeuille");
  var threads = GmailApp.search(requete);
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var msg = messages[j].getPlainBody();
      var sub = messages[j].getSubject();
      var dat = messages[j].getDate();
      ss.appendRow([dat, sub, msg])
    }
  }  
  GmailApp.markThreadsRead(threads);
}

Ensuite, puisqu'on est en app script, autant utiliser les expressions régulières pour en tirer les données voulues. Par exemple

  var regExp = new RegExp(/SIRET.*(\d+)/);
  Logger.log(regExp.exec(msg)[0].match(/\d+/)[0])
  var regExp = new RegExp(`Raison Sociale : ([^
]+)`);
  Logger.log(regExp.exec(msg)[0])

Je reste sur des généralités pour le moment, si tu veux aller plus loin je reste à ta disposition ... tu peux déjà commencer si besoin à regarder comme tirer les infos.

Si je comprends bien

  var requete ="is:unread in:inbox from:machin@gmail.com"

machin@gmail.com c'est mon adresse gmail à moi sur lequel je reçois le mail ou c'est le mail de l'expéditeur ?
Si c'est mon adresse gmail à moi, je suppose que ça doit être la même adresse mail Google sur lequel le GSheet a été créé c'est ça ?

Si c'est l'adresse de l'expéditeur ... dans ce cas là, peut-on plutôt mettre la réception de tous les mails d'un nom de domaine particulier ? parce qu'il y aura machin1@societe.fr machin2@societe.fr machin3@societe.fr etc ... vu que ce sera plusieurs commerciaux qui m'enverront des mails.

Je commence à créer les comptes et faire des tests. Merci.

  var requete ="is:unread in:inbox from:machin@gmail.com"

machin@gmail.com c'est mon adresse gmail à moi sur lequel je reçois le mail ou c'est le mail de l'expéditeur ?

c'est l'expéditeur

mais bon restons simples pour ne pas se disperser ... dans ton cas, le script serait

function mail() {
  var requete = "is:unread in:inbox"
  var ss = SpreadsheetApp.getActive().getSheetByName("maFeuille");
  var threads = GmailApp.search(requete);
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      if (messages[j].getFrom().includes('@societe.fr')) {
        var msg = messages[j].getPlainBody();
        var sub = messages[j].getSubject();
        var dat = messages[j].getDate();
        ss.appendRow([dat, sub, msg])
      }
    }
  }
  GmailApp.markThreadsRead(threads);
}

cela reste à affiner et à rédiger plus proprement avec forEach ou filter

Toujours la même erreur que la dernière fois ... J'ai essayé avec 3 comptes différents ...

capture d e cran 2022 06 09 a 11 58 17

Décidemment, tu dois avoir une configuration spéciale !

As-tu un espace (drive) perso et une adresse email perso en gmail.com ?

bah oui ... de toute façon chaque adresse gmail il y a le drive associé.
Et toutes mes adresses sont perso ... aucun compte Google Workspace

Est-ce que tu as pu résoudre ton problème ?

Je n'ai pas réssayé depuis mais je pense que c'est toujours pareil.

Rechercher des sujets similaires à "elements mail tableau gsheet"