Français
Envoyer
Dépose un message en brouillon ou l’envoie, depuis la boîte de votre choix et avec la signature de votre choix. Se branche derrière « Rédiger » — ou se remplit à la main.
Envoyer est le nœud qui fait exister un message : déposé en brouillon dans une boîte, ou envoyé pour de bon. C’est le seul nœud mail dont l’effet est send : c’est donc lui que les essais retiennent, lui que la politique de nœuds de l’organisation peut restreindre, et lui que le coupe-circuit d’envoi arrête.
Envoyer suit en général Rédiger ou Rédiger (IA), qui préparent le message sans toucher à la boîte. Il se remplit aussi à la main quand il n’y a rien à rédiger : un accusé de réception d’une ligne, une relance sur gabarit.
En bref
- Type :
mail.send· version 1 - Catégorie : Actions
- Nature : Étape — s’exécute pendant une exécution
- Effet : Envoie un e-mail (
send) — envoie un e-mail ; décrit au lieu d’être fait pendant un essai, arrêté par le coupe-circuit d’envoi - Exige un mail porteur : Non
- Connexion : Aucune
- Entrées :
main - Sorties :
main
Paramètres
message
Message à envoyer — L’expression qui porte un message rédigé en amont — {{ data.compose_1.message }}. Laissez vide pour composer entièrement le message ci-dessous. Les champs remplis ici l’emportent toujours sur le message repris.
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 200000 caractères au plus
- Expressions :
{{ }}accepté
mode
Ce qu’on en fait — Le brouillon se relit avant de partir (il apparaît dans la Revue du matin et dans la vraie boîte). L’envoi part pour de bon, sous les garde-fous de l’organisation.
- Type : Un choix (
options) - Requis : Oui
- Défaut :
draft - Options :
draft— Déposer en brouillon : Rien ne part. Le message attend une relecture humaine.send— Envoyer : Le message part pour de bon, sous le coupe-circuit et le plafond horaire de l’organisation. Pendant un essai, rien ne part.
mailbox
Boîte d’expédition — Depuis quelle boîte le message part. Vide : celle du mail déclencheur. Obligatoire quand le déclencheur n’est pas un mail (planification, webhook, sondage) : il n’y a alors aucune boîte à reprendre, et la publication le refuse. Un workflow déclenché sur une boîte peut parfaitement écrire depuis une autre — c’est ce qui permet de répondre depuis la boîte de service.
- Type : Ressource distante (
resourceLocator) - Requis : Selon le déclencheur — oui : planification, webhook ou événement d’intégration
- Façons de choisir : dans une liste, saisir un identifiant (
mail.mailbox)
to
Destinataires — Adresses séparées par des virgules. Vide : celles du message repris.
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 2000 caractères au plus
- Expressions :
{{ }}accepté
cc
Copie (Cc)
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 2000 caractères au plus
- Expressions :
{{ }}accepté
bcc
Copie cachée (Cci)
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 2000 caractères au plus
- Expressions :
{{ }}accepté
subject
Objet — Vide : celui du message repris.
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 500 caractères au plus
- Expressions :
{{ }}accepté
bodyText
Message — Vide : le corps du message repris.
- Type : Texte long (
text) - Requis : Non
- Défaut :
""(vide) - 200000 caractères au plus
- Expressions :
{{ }}accepté
threading
Fil de discussion
- Type : Un choix (
options) - Requis : Oui
- Défaut :
inherit - Options :
inherit— Comme le message le dit : Le fil vient du message repris, qui sait déjà s’il répond ou non.reply— Répondre dans le fil : La réponse est rattachée au mail déclencheur et reste dans sa conversation. Refusé à la publication quand le déclencheur n’est pas un mail : il n’y a pas de fil.new— Nouveau fil : Le message repart seul, hors de la conversation d’origine.
- Exige un mail porteur pour :
reply
attachments
Pièces jointes
- Type : Un choix (
options) - Requis : Oui
- Défaut :
fromMessage - Options :
fromMessage— Celles du message : Les pièces que le nœud « Rédiger » a retenues.none— Aucune : Le message part sans pièce.fromTrigger— Celles de l’exécution : Toutes : celles du mail reçu, puis les fichiers ajoutés par les étapes précédentes.fromTriggerFiltered— Celles de l’exécution, filtrées : Seulement celles dont le type ou le nom correspond.
attachmentMime
Type de fichier — Type MIME exact (application/pdf) ou famille entière (image/*). Laissé vide, aucune PJ n’est retenue.
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 200 caractères au plus
- Exemple :
application/pdf - Affiché quand :
attachmentsvautfromTriggerFiltered - Expressions :
{{ }}accepté
attachmentNamePattern
Nom du fichier — Motif simple : * remplace n’importe quoi, ? un caractère (*.pdf, facture-*). La casse est ignorée.
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 200 caractères au plus
- Exemple :
*.pdf - Affiché quand :
attachmentsvautfromTriggerFiltered - Expressions :
{{ }}accepté
signature
Signature — Un workflow ne signe pas tout seul : sans choix explicite, le message part sans signature.
- Type : Un choix (
options) - Requis : Oui
- Défaut :
none - Options :
none— Aucunemember— Celle du membre qui exécute : Sa signature par défaut, celle du composeur.person— Celle d’une personne désignée : Écrire depuis la boîte de service en signant du nom de la personne en charge.named— Une signature précise
signatureMemberId
Personne
- Type : Ressource distante (
resourceLocator) - Requis : Non
- Façons de choisir : dans une liste, saisir un identifiant (
org.member) - Affiché quand :
signaturevautperson
signatureId
Signature
- Type : Ressource distante (
resourceLocator) - Requis : Non
- Façons de choisir : dans une liste, saisir un identifiant (
mail.signature) - Affiché quand :
signaturevautnamed
Sorties
main
Données produites
Ce que ce nœud ajoute aux données de l’exécution, et comment le lire dans une expression. <step> désigne la clé de l’étape : le nom du nœud ramené à un identifiant (voir Données et expressions).
{{ data.<step>.opId }}—string. L’identifiant de l’opération sortante enregistrée. Stable quand l’étape est retentée. En essai, il vautsimulated:mail.draftousimulated:mail.send.{{ data.<step>.simulated }}—boolean.trueen essai : rien n’a été déposé ni envoyé, le détail d’exécution décrit ce qui se serait passé.{{ data.<step>.mode }}—string.draftousend, selon « Ce qu’on en fait ».{{ data.<step>.mailboxId }}—string. L’identifiant de la boîte réellement employée. En essai, la boîte choisie sur le nœud, ousimulatedquand aucune n’a été choisie.{{ data.<step>.mailboxAddress }}—string. L’adresse de la boîte depuis laquelle le message part.{{ data.<step>.messageId }}—string. L’en-têteMessage-IDposé sur le message, stable quand l’étape est retentée. Utile à ranger dans une table pour retrouver le message plus tard. Absent en essai.{{ data.<step>.sentAt }}—string or null. En mode envoi, l’instant ISO 8601 où la chaîne d’envoi a accepté le message (pas celui où le fournisseur l’a remis).nullpour un brouillon et en essai.{{ data.<step>.signature }}—string. Le nom de la signature apposée. Absent quand le message part sans signature ou en essai.{{ data.<step>.message }}—object { to, cc, bcc, subject, inReplyToMessageId, attachments }. Ce qui a réellement été enregistré, après combinaison du message repris et des champs du nœud :to,ccetbccen tableaux (éventuellement vides),subject,inReplyToMessageId(nullhors fil) etattachmentsen tableau de{ position, filename, mime, size }. Le corps n’est pas recopié.{{ data.<step>.summary }}—string. Une phrase pour le détail d’exécution (brouillon déposé ou message envoyé, depuis quelle boîte, avec quels fichiers), dans la langue du membre qui exécute le workflow.summaryKeyetsummaryParamsportent la même phrase sous forme de clé de traduction et de paramètres.
Exemple
Un nœud Rédiger (IA) nommé Reponse a rédigé une réponse. Ajoutez un nœud Envoyer :
message: "{{ data.reponse.message }}"
mode: draft
mailbox: (vide)
threading: inherit
attachments: fromMessage
signature: memberLe brouillon est déposé dans la boîte du mail déclencheur, dans le fil (Rédiger (IA) a répondu dans le fil), avec la signature par défaut du membre qui exécute le workflow. Les données de l’étape sont :
json
{
"opId": "6f1c…",
"simulated": false,
"mode": "draft",
"mailboxId": "2b7e…",
"mailboxAddress": "commercial@example.com",
"messageId": "<…@example.com>",
"sentAt": null,
"signature": "Par défaut",
"message": {
"to": ["acheteur@example.com"],
"cc": [],
"bcc": [],
"subject": "Re: Prix pour 200 pièces",
"inReplyToMessageId": "<CAF123@mail.example.com>",
"attachments": []
},
"summary": "…"
}D’où vient le message
Deux sources se combinent, et la règle tient en une phrase : le message repris donne la base, et tout champ rempli sur Envoyer l’emporte sur lui.
- « Message à envoyer » prend une expression qui pointe vers un message préparé en amont, comme
{{ data.reponse.message }}. L’expression doit pointer sur l’objetmessagelui-même ; tout autre chose (du texte, une autre clé) échoue avecnode_invalid_paramet l’indication de pointer vers la sortie d’un nœud Rédiger. - « Destinataires », « Copie (Cc) », « Copie cachée (Cci) », « Objet », « Message » remplacent la partie correspondante du message repris quand ils sont remplis. Laissés vides, la valeur reprise est conservée. Laissez « Message à envoyer » vide pour écrire tout le message sur le nœud.
Comme un champ vide veut dire « garder la valeur reprise », on ne peut pas retirer une copie depuis Envoyer : préparez plutôt le message sans elle.
Brouillon ou envoi
- Déposer en brouillon : rien ne part. Le brouillon apparaît dans la vraie boîte et dans la Revue, en attente d’un humain. Les brouillons ne sont jamais retenus par le coupe-circuit d’envoi ni par le plafond horaire.
- Envoyer : le message part pour de bon, par la chaîne d’envoi. Si les envois sont suspendus (le réglage d’instance
SEND_ENABLEDou le coupe-circuit propre à l’organisation), le message est retenu, pas perdu, et part dès que les envois reprennent. Le plafond horaire de l’organisation (SEND_MAX_PER_HOUR, 100 par heure par défaut) diffère les messages qui le dépassent au lieu de les abandonner. Voir Revue et approbations et Variables d’environnement.
Boîte d’expédition
La boîte est choisie dans cet ordre : le champ « Boîte d’expédition », puis l’expéditeur proposé par le message repris, puis la boîte du mail déclencheur. Un workflow déclenché sur une boîte peut donc répondre depuis une autre, comme une adresse de service partagée. Seules les boîtes du membre qui exécute le workflow peuvent être employées.
Quand le déclencheur n’apporte pas de mail (planification, webhook, sondage), le champ est obligatoire et la publication refuse une valeur vide. Si aucune boîte n’est trouvée à l’exécution, l’étape échoue avec mail.mailbox_required.
Fil de discussion
- Comme le message le dit (défaut) : le fil vient du message repris. Rédiger et Rédiger (IA) ont déjà décidé s’ils répondent.
- Répondre dans le fil : force
In-Reply-To/Referencesà partir du mail déclencheur. Exige un mail déclencheur : la publication le refuse sinon, et à l’exécution l’étape échoue avecmail.reply_without_email. Si le mail déclencheur n’a pas deMessage-IDexploitable, le message part hors du fil plutôt que d’être perdu. - Nouveau fil : le message repart seul.
Pièces jointes et signature
« Pièces jointes » vaut par défaut « Celles du message », c’est-à-dire les fichiers que le nœud Rédiger a retenus. « Celles de l’exécution » et « Celles de l’exécution, filtrées » puisent dans les pièces du mail déclencheur et dans les fichiers ajoutés par les étapes précédentes ; les images intégrées ne sont jamais reprises. Le message composé, pièces comprises, doit rester sous la limite de taille de l’instance (SEND_MAX_BYTES, 25 Mo par défaut), sinon l’étape échoue avec node_invalid_param.
Un workflow ne signe pas tout seul : avec « Signature » sur « Aucune », le message part sans signature. « Celle du membre qui exécute » prend sa signature par défaut ; « Celle d’une personne désignée » signe avec la signature par défaut de quelqu’un d’autre (écrire depuis la boîte de service en signant au nom de la personne en charge) ; « Une signature précise » en prend une choisie dans la liste.
Conseils
- Jamais deux envois. Envoyer enregistre une opération sortante dont la clé dépend de l’étape. Si l’étape est retentée (plantage d’un worker, erreur transitoire), elle retrouve la même opération et rend le même
opId: le message ne repart pas. - Rejouer une exécution renvoie. Rejouer une exécution entière depuis la liste des exécutions crée une nouvelle exécution avec de nouvelles clés : ses étapes Envoyer envoient de nouveau. Voir Gestion des erreurs.
- Essais. En essai, rien n’est écrit : ni brouillon, ni message, ni opération sortante. Le détail d’exécution dit ce qui aurait été déposé ou envoyé. Un essai ne vérifie ni la boîte ni la signature, sauf l’absence de boîte (
mail.mailbox_required), qui échoue à l’essai comme elle échouerait en production. - Refus définitifs.
mail.mailbox_forbidden(la boîte n’existe pas ou n’est pas au membre),mail.mailbox_cannot_send(déconnectée, en erreur ou sans identifiants : reconnectez-la) etmail.signature_not_foundsont définitifs et ne sont pas retentés. Choisir « Celle d’une personne désignée » ou « Une signature précise » sans désigner la personne ou la signature donnenode_invalid_param. - Aucun destinataire. Si ni le message repris ni « Destinataires » ne fournissent d’adresse, l’étape échoue avec
node_invalid_param.