J’ai fait développer un couplage avec N8N pour GRIST qui envoie automatiquement des mails à des destinataires depuis une colonne identifiée comme champ “mail”. Or Grist n’est pas capable d’identifier un mail dont l’aprés “.” est “corsica”. Par exemple xxx@yyy.corsica ne sera pas identifié comme étant un adresse mail. Lors que je contourne cette limite en traduisant cela par un lien hypertexte, il ne prend en compte que la première adresse identifiée dans la cellule. Serait-il possible de faire évoluer ce truc là en lui disant que si on détermine une adresse comme étant un mail, il ne finit pas nécessairement par “.com” ou “.fr” ?
Merci DNUM…
Grist ne possède qu’un seul type pour les colonnes textuels. Il s’agit du type Texte.
Dans les sous-types possibles, il n’existe que TextBox, Markdown et Hypertext.
Si votre colonne est de type Texte / TextBox, c’est au niveau de n8n de récupérer la colonne $mail, d’y appliquer les traitements nécessaires pour valider le mail et d’envoyer le mail.
Bonjour,
J’espère que ma réponse ne sera pas hors-sujet - désolé par avance dans le cas contraire.
Grist ne dispose pas du type “mail”, donc pas de mécanisme natif pour valider la construction d’une adresse de messagerie, pour lui c’est juste un texte quelconque… En revanche, il est possible d’utiliser une formule pour gérer un indicateur “mail structurellement valide”, basé sur une expression régulière :
import re
email_regex = r"^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$"
if $Mail:
return bool(re.match(email_regex, $Mail))
else:
return False
Puis derrière, de ne passer à N8N que les enregistrements qui ont réussi la vérification.
Par contre, vu le cas décrit, le plus probable est que ce soit en réalité le traitement dans N8N qui effectue en entrée un contrôle des valeurs de mails et se retrouve à l’origine du rejet, les noms de domaines de 1er niveau (.fr, .com, .org…) étant historiquement à max. 3 lettres.
Pour N8N c’est réglé, néanmoins lorsque je veux envoyer un émail directement depuis GRIST, le problème persiste…impossible de cliquer pour envoyer (faut copier coller… c’est l’âge de pierre..)
Qui peut expliquer à GRIST que les adresses émails n’ont pas que 3 caractères après le point ?
OK, donc le problème se situerait plutôt au niveau du clic sur le lien d’un mail directement dans Grist.
D’après la capture d’écran, l’option d’affichage du champ texte est probablement réglée sur Hyperlien. Dans ce cas, Grist laisse au navigateur le soin d’interpréter l’URL au clic comme bon lui semble.
Dans mon cas par exemple, le clic sur le symbole dans une cellule réglée sur Hyperlien et contenant test@test.corsica m’ouvre un nouvel onglet qui tente d’atteindre le site http://test.corsica (exit tout ce qui précède @).
Pour mettre à Grist les points sur les ‘i’, on peut le forcer à structurer une URL qui utilise le protocole MAILTO, ça donnerait “mailto:” + $Mail. Pour un affichage plus propre, on peut régler le champ sur affichage Markdown en utilisant une formule du genre : f"[{$Mail}](mailto:{$Mail})"
Elle affichera le mail seulement, tout en utilisant mailto:… comme URL au clic.
Sur mon poste, le clic ouvre bien un nouveau mail avec test@test.corsica comme destinataire pré-renseigné.
Si le problème persiste pour vous, ça peut alors venir de votre client de messagerie. Pour savoir si Grist est en cause ou pas, tentez de coller mailto:test@test.corsica dans la barre d’adresse sur une nouvelle fenêtre du navigateur. Si rien ne se passe, c’est probablement votre logiciel de messagerie qui contrôle l’adresse mail lors de l’appel et rejette le .corsica
Merci beaucoup mmot, je suis un vieux “nocode” je n’ai pas réussi à recopier ta formule au bon endroit et cela a supprimé mes données…
Je vais regarder pour faire intégrer ta proposition par mon stagiaire !
Merci, la messagerie n’est pas en cause, c’est le cumul de mails dans la meme cellule et l’incapacité à identifier l’adresse mail au-delà de 3 caractères aprés le “.” final de GRIST qui pose souci, je vais faire essayer avec ta formule.
Merci !
Au cas où, la formule précédente avec l’expression régulière (regex) ne gère qu’un mail à la fois.
Voici une formule qui utilise une regex plus simple et construit un mailto: à partir à partir d’une cellule contenant une à plusieurs adresses mail :
import re
mail_string = $Mail
if mail_string:
# Expression régulière pour conserver tout ce qui ressemble à un mail
email_pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
emails = re.findall(email_pattern, mail_string)
if emails:
# 1 mail ou + > on construit le mailto:adr1@test.fr;adr2@test.fr...
return f"mailto:{';'.join(emails)}"