Extraire données via scrip d'un corps d'email gmail vers gsheet
Bonjour à tous,
Je suis à la recherche d'un scrip qui pourrait me facilité l'exploitation de certaines données stockées dans le corps de texte d'un email.
J'ai classé ces email avec un label (label:contact-cm_ot) dans Gmail et les infos a extraires sont les suivantes:
- Nom
- Prénom
- Téléphone
- Commentaire
Ces informations ont l'air d'etre ordonnées dans une table cf le code ci dessous ci exploitable:
<ul>
<li><strong>Nom :</strong> XX</li>
<li><strong>Prénom :</strong> <span class="il">XX</span></li>
<li><strong>Email :</strong> <a href="mailto:XX@gmail.com" target="_blank">XX@gmail.<wbr>com</a></li>
<li><strong>Téléphone :</strong> 06XX</li>
<li><strong>Date d'arrivée :</strong> 19/12/2021</li>
<li><strong>Date de départ :</strong> 26/12/2021</li>
<li><strong>Nombre d'adulte :</strong> 6</li>
<li><strong>Nombre d'enfant :</strong> 6</li>
<li><strong>Nombre de bébé :</strong> 0</li>
<li><strong>Commentaire :</strong> TEST message REPONDEUR 31/08/2021 8:02</li>
</ul>
Je peux fournir d'autres informations aux personnes qui souhaite me donner un coup de main sur cette tache.
Je n'ai pas réussi à trouver d'info en parcourant les différents sujets sur le net.
D'avance merci
Caribou
Bonjour,
Voila un exemple pour extraire les 5 données demandées :
function test() {
const texte = `<ul>
<li><strong>Nom :</strong> AAA</li>
<li><strong>Prénom :</strong> <span class="il">BBB</span></li>
<li><strong>Email :</strong> <a href="mailto:XX@gmail.com" target="_blank">XX@gmail.<wbr>com</a></li>
<li><strong>Téléphone :</strong> 06XX</li>
<li><strong>Date d'arrivée :</strong> 19/12/2021</li>
<li><strong>Date de départ :</strong> 26/12/2021</li>
<li><strong>Nombre d'adulte :</strong> 6</li>
<li><strong>Nombre d'enfant :</strong> 6</li>
<li><strong>Nombre de bébé :</strong> 0</li>
<li><strong>Commentaire :</strong> TEST message REPONDEUR 31/08/2021 8:02</li>
</ul>`;
const nom = texte.match(/Nom :<\/strong> ?([^<]+) ?</)[1];
const prenom = texte.match(/Prénom :<\/strong> ?<span class="il"> ?([^<]+) ?</)[1];
const email = texte.match(/mailto:([^"]+)"/)[1];
const telephone = texte.match(/Téléphone :<\/strong> ?([^<]*) ?</)[1];
const commentaire = texte.match(/Commentaire :<\/strong> ?([^<]*) ?</)[1];
console.log(nom);
console.log(prenom);
console.log(email);
console.log(telephone);
console.log(commentaire);
}Ce qui donne ici :
Bonjour Sebastien,
Merci d'avoir pris le temps de trouver une piste concernant ma demande.
En revanche si je comprends bien, ton scrip récupère uniquement les infos que j'ai transmis en guise d'exemple.
Ca ne va pas récupérer chaque email labelisé ("label:contact-cm_ot") dans mon Gmail afin d'en extraire ce type de données pour chaque email reçu.
d'avance merci pour cette prise en compte.
Cordialement
Ca peut potentiellement récupérer les infos de tous les données qui ont un format similaire.
Par contre pour ce qui est de la les récupérations emails de gmail, je laisse cette partie à d'autres membres qui ont plus l'habitude de travailler avec les scripts pour gmail.
Salut,
A tester en réel :
function getEmailsByLabel() {
var data = [];
const label = GmailApp.getUserLabelByName("TON LABEL ICI");
const threads = label.getThreads();
threads.forEach(function(thread) {
const emails = thread.getMessages();
emails.forEach(function(email) {
data.push([email.getDate(), email.getFrom(), extractEmail(email.getPlainBody())]);
});
});
console.log(data)
}
function extractEmail(emailBody) {
const nom = (emailBody.match(/Nom :<\/strong> ?([^<]+) ?</) || [''])[1].trim();
const prenom = (emailBody.match(/Prénom :<\/strong> ?<span class="il"> ?([^<]+) ?</) || [''])[1].trim();
const email = (emailBody.match(/mailto:([^"]+)"/) || [''])[1].trim();
const telephone = (emailBody.match(/Téléphone :<\/strong> ?([^<]*) ?</) || [''])[1].trim();
const commentaire = (emailBody.match(/Commentaire :<\/strong> ?([^<]*) ?</) || [''])[1].trim();
return [nom, prenom, email, telephone, commentaire];
}Bonjour Pierre,
Je viens de voir ton scrip et je t'en remercie.
En revanche j'essaie tant bien que mal de le faire tourner, mais j'ai du mal.
Il doit sans doute y avoir un problème dans la formule de recuperation des elements
Le nom est stocké ainsi dans le fichier source
<strong>Nom :</strong>
Je peux joindre un fichier extract si tu le souhaite pour m'aider a avancer!
Bien cordialement
Bonjour,
Si ça ne fonctionne pas, il faut identifier si c'est le regex qui pose problème ou un autre point, j'ai remis la proposition de Sébastien, qui fonctionnait sur l'exemple.
Donc, peux-tu ajouter un log afin de voir le corps des emails qui sont passés dans la fonction, comme ceci :
function extractEmail(emailBody) {
console.log("email extract sur : "+emailBody)
const nom = (emailBody.match(/Nom :<\/strong> ?([^<]+) ?</) || [''])[1].trim();
const prenom = (emailBody.match(/Prénom :<\/strong> ?<span class="il"> ?([^<]+) ?</) || [''])[1].trim();
const email = (emailBody.match(/mailto:([^"]+)"/) || [''])[1].trim();
const telephone = (emailBody.match(/Téléphone :<\/strong> ?([^<]*) ?</) || [''])[1].trim();
const commentaire = (emailBody.match(/Commentaire :<\/strong> ?([^<]*) ?</) || [''])[1].trim();
return [nom, prenom, email, telephone, commentaire];
}Salut Pierre,
Merci pour ces precisions.
En revanche étant pas très familier avec l'environement gmail et sheet, je crois que je me suis mis la barre un peu trop haute pour commencer.
Je n'arrive point a extraire les info utile de mes email malgré les scrip reçu et modifiés de votre part.
Penses tu que ca serait pas plus simple si je te transfer un email en question en MP?