Skip to content

Lire les pièces jointes ​

Extrait le texte des pièces jointes du mail (PDF, texte, HTML…) et le met dans les données de travail : {{ data.extract_text_1.attachments.0.text }}. À placer avant un nœud IA pour lui donner le contenu d’un document.

Lire les pièces jointes extrait le texte des pièces jointes et le place dans les données de travail, où les nœuds suivants peuvent l’utiliser. C’est le nœud à poser avant un nœud IA quand le contenu utile est dans un document plutôt que dans le corps du mail : une facture PDF, un contrat, un export CSV.

Les pièces sont celles de l’exécution : d’abord les pièces jointes du mail déclencheur, puis les fichiers ajoutés par les étapes précédentes (un document rapatrié d’un drive, un PDF signé). Une exécution sans mail peut donc lire les fichiers ajoutés par ses propres étapes.

En bref ​

  • Type : attachment.extract_text · version 1
  • Catégorie : Données
  • Nature : Étape — s’exécute pendant une exécution
  • Effet : Sans effet externe (none) — rien n’est écrit hors de Mankomail ; rejouable sans risque
  • Exige un mail porteur : Non
  • Connexion : Aucune
  • Entrées : main
  • Sorties : main

Paramètres ​

selection ​

Pièces jointes retenues

  • Type : Un choix (options)
  • Requis : Oui
  • Défaut : all
  • Options :
    • all — Toutes les pièces jointes : Celles du mail déclencheur, puis les fichiers ajoutés par les étapes précédentes (un acte rapatrié, un PDF signé), dans cet ordre.
    • first — La première seulement : La première PJ, quand on sait qu’il n’y en a qu’une qui compte.
    • byMime — Par type de fichier : Par type MIME : application/pdf, ou toute une famille avec image/*.
    • byName — Par nom de fichier : Par motif sur le nom : *.pdf, facture-*.

mime ​

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 : selection vaut byMime
  • Expressions : {{ }} accepté

namePattern ​

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 : selection vaut byName
  • Expressions : {{ }} accepté

includeInline ​

Inclure les images intégrées — Les logos de signature et images intégrées au corps sont ignorés par défaut — ce ne sont pas des pièces jointes au sens du membre.

  • Type : Oui / non (boolean)
  • Requis : Non
  • Défaut : false
  • Rangé sous « Avancé » dans l’éditeur

maxChars ​

Caractères lus par pièce jointe — Au-delà, le texte est coupé et marqué « tronqué ». Un contrat de 200 pages n’a pas à entrer en entier dans les données d’exécution.

  • Type : Nombre (number)
  • Requis : Non
  • Défaut : 20000
  • Nombre entier, de 1000 à 100000
  • Rangé sous « Avancé » dans l’éditeur

onMissing ​

Si aucune PJ n’est lisible — S’applique quand aucune PJ ne correspond au filtre, et quand le contenu d’une PJ n’existe plus (purgé).

  • Type : Un choix (options)
  • Requis : Oui
  • Défaut : skip
  • Options :
    • skip — Continuer sans elle : Le workflow continue avec une liste vide. L’étape réussit, la PJ apparaît dans « ignorées ».
    • fail — Faire échouer l’étape : Quand lire la PJ est le but de l’étape : mieux vaut un échec visible qu’un workflow qui continue à vide.

onUnsupported ​

Si le format ne se lit pas — Formats sans extracteur (archives, images sans OCR, fichiers CAO) et PJ trop volumineuses.

  • Type : Un choix (options)
  • Requis : Oui
  • Défaut : skip
  • Options :
    • skip — Continuer sans elle : Les autres PJ sont lues normalement. L’étape réussit, la PJ apparaît dans « ignorées ».
    • fail — Faire échouer l’étape : Quand lire la PJ est le but de l’étape : mieux vaut un échec visible qu’un workflow qui continue à vide.

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>.attachments }} — array of { position, filename, mime, size, text, truncated, pages?, extractor }. Les pièces jointes lues, dans l’ordre. Vide quand rien n’a pu être lu.
  • {{ data.<step>.attachments.0.text }} — string. Le texte de la première pièce lue, coupé à « Caractères lus par pièce jointe ».
  • {{ data.<step>.attachments.0.filename }} — string. Le nom de fichier de la première pièce lue. mime et size (en octets) donnent son type et sa taille, et position sa position dans la liste des pièces de l’exécution.
  • {{ data.<step>.attachments.0.truncated }} — boolean. true quand le texte a été coupé à « Caractères lus par pièce jointe ».
  • {{ data.<step>.attachments.0.pages }} — number. Pour un PDF, le nombre de pages réellement lues. Absent pour les autres formats.
  • {{ data.<step>.attachments.0.extractor }} — string. Le lecteur qui a traité le fichier : text, html ou pdf.
  • {{ data.<step>.count }} — number. Le nombre de pièces lues (la longueur de attachments).
  • {{ data.<step>.skipped }} — array of { position, filename, reason }. Les pièces sélectionnées mais écartées, avec la raison : unsupported_type, too_large, too_many, not_found ou unavailable.
  • {{ data.<step>.summary }} — string. Une phrase pour le détail d’exécution (fichiers lus, pages, troncature, fichiers ignorés), dans la langue du membre qui exécute le workflow. summaryKey et summaryParams portent la même phrase sous forme de clé de traduction et de paramètres.

Exemple ​

Des factures fournisseurs arrivent en PDF joint. Ajoutez un nœud Lire les pièces jointes nommé Fichiers :

selection: byMime
mime: "application/pdf"
maxChars: 20000
onMissing: skip
onUnsupported: skip

Puis un nœud Extraire dont le « Contenu à traiter » vaut {{ data.fichiers.attachments.0.text }}. Pour un mail qui porte un PDF et un logo de signature, les données de l’étape sont :

json
{
  "attachments": [
    {
      "position": 1,
      "filename": "F-2026-118.pdf",
      "mime": "application/pdf",
      "size": 84211,
      "text": "FACTURE F-2026-118 …",
      "truncated": false,
      "pages": 2,
      "extractor": "pdf"
    }
  ],
  "count": 1,
  "skipped": [],
  "summary": "…"
}

Le logo est une image intégrée : il est ignoré sans apparaître dans skipped.

Formats pris en charge et limites ​

  • Texte : text/plain, text/csv, text/tab-separated-values et tout autre type text/*.
  • HTML : text/html et application/xhtml+xml, lus comme du texte.
  • PDF : application/pdf et application/x-pdf. Au plus les 50 premières pages sont lues ; les suivantes sont ignorées sans poser truncated, comparez donc pages à la longueur du document quand c’est important.

Tout autre type (archives, images, documents bureautiques, fichiers CAO) est écarté en unsupported_type sans que son contenu soit chargé. Il n’y a pas d’OCR. Un fichier impossible à analyser (un PDF chiffré ou endommagé, par exemple) ou dont la lecture dépasse le budget de temps est lui aussi écarté en unsupported_type.

Les fichiers de plus de 10 Mo sont écartés en too_large avant d’être chargés. Chaque extraction dispose d’un budget de 20 secondes. Chaque texte est coupé à « Caractères lus par pièce jointe » (20 000 par défaut, entre 1 000 et 100 000) et marqué comme tronqué. Au plus 10 pièces sont lues par étape ; les suivantes sont écartées en too_many.

Quand une pièce ne se lit pas ​

Par défaut, une pièce illisible ne fait pas échouer le workflow : un mail porte souvent un PDF utile à côté de quelque chose d’illisible. Chaque pièce écartée est listée dans skipped avec sa raison, et l’étape réussit.

  • « Si aucune PJ n’est lisible » couvre le cas où rien ne correspond à la sélection, et les pièces dont le contenu n’existe plus (not_found, unavailable).
  • « Si le format ne se lit pas » couvre unsupported_type et too_large.

Réglez l’un ou l’autre sur « Faire échouer l’étape » quand lire le document est tout l’objet de l’étape : mieux vaut un échec visible qu’un workflow qui tourne sur un texte vide.

Conseils ​

  • Sélection fermée par défaut. « Par type de fichier » avec un type vide, ou « Par nom de fichier » avec un motif vide, ne retient rien. Les types acceptent application/pdf, image/* ou image/ ; les noms acceptent un motif simple avec * et ? (facture-*.pdf), sans distinction de casse.
  • Images intégrées. Les logos de signature et les images insérées dans le corps sont ignorés, sauf si « Inclure les images intégrées » est coché.
  • Le texte extrait est un contenu tiers. Il est écrit par l’expéditeur du fichier. Quand vous l’insérez dans les consignes d’un nœud IA, le modèle est prévenu que les valeurs insérées sont des données ; les balises de délimitation des nœuds IA sont neutralisées dans le texte extrait. Préférez « Contenu à traiter » aux consignes quand le nœud en possède un.
  • Essais. Lire n’est pas un effet : en essai, les pièces sont réellement lues, et les nœuds suivants voient le vrai texte.
  • Erreurs. Avec « Si aucune PJ n’est lisible » sur « Faire échouer l’étape » et rien de sélectionné, l’étape échoue avec node_nothing_to_do ; avec une pièce écartée sous un réglage « Faire échouer l’étape », elle échoue avec le code correspondant : attachment.unsupported_type, attachment.too_large, attachment.not_found ou attachment.unavailable. Une panne du service de pièces jointes est relayée telle quelle, et retentée quand elle est transitoire.