Le journal indique « envoi réussi », mais la boîte de test ne montre aucun fichier joint.

Pour tester les pièces jointes d’e-mail, vérifiez séparément le fichier produit, sa structure MIME et sa réception dans une boîte contrôlée : une réponse positive de l’interface d’envoi ne prouve pas que le destinataire peut ouvrir la pièce jointe. Cette semaine, commencez par des assertions automatisées sur un fichier sans données sensibles, puis ajoutez une réception réelle si l’objectif de validation l’exige.

Développeurs : vous générez et envoyez des factures, rapports ou notifications depuis votre produit.
Ingénieurs QA : vous devez reproduire l’absence d’une pièce jointe, un nom inattendu ou un contenu altéré.
Indépendants : vous voulez confirmer qu’un message reçu est réellement exploitable, et pas seulement envoyé selon vos journaux.

Le test commence par une preuve attendue

Avant d’envoyer un message, formulez le résultat que le test doit démontrer. « L’envoi a réussi » est trop vague : cela peut désigner la création du fichier, la remise du message à un service d’envoi ou sa réception dans une boîte. Ces résultats ne sont pas interchangeables.

Nous séparons le parcours en quatre preuves opérationnelles :

Étape observée Ce que le résultat permet d’affirmer Ce qu’il ne prouve pas
Génération du fichier Le produit a créé un fichier conforme aux attentes du test Que le fichier a été ajouté au message
Encapsulation MIME Le message contient une partie correspondant à la pièce jointe attendue Que le destinataire l’a reçu ou peut l’ouvrir
Soumission de l’envoi L’application ou son relais a accepté la demande à son niveau Que le message a atteint la boîte de destination
Réception contrôlée La boîte a reçu un message dont la pièce jointe peut être extraite et vérifiée Que tous les services de réception se comporteront de la même façon

Cette séparation évite les faux succès. Une réponse favorable d’une API d’envoi prouve seulement que la requête a franchi l’étape représentée par cette réponse. Les journaux applicatifs peuvent confirmer qu’un document a été sélectionné ou généré, mais ne montrent pas forcément le contenu réellement transporté.

Choisissez donc le niveau de preuve en fonction du risque. Pour une modification de modèle qui ne touche pas au transport, un test de génération associé à une inspection du message peut suffire. Pour un parcours de facturation ou de rapport destiné à des utilisateurs, prévoyez aussi une réception contrôlée et une vérification du fichier téléchargé.

Préparez un fichier repérable et sans données personnelles

Créez un document réservé à l’essai, sans nom de client, adresse, facture réelle ni identifiant de production. Donnez-lui un nom immédiatement reconnaissable et notez les attentes du test : nom exact, type de contenu, texte ou données à retrouver, et taille approximative si cette caractéristique compte pour le produit.

Le bon fichier dépend de la fonction testée. Une facture fictive peut vérifier l’export PDF ; un rapport synthétique peut révéler une colonne manquante ; un visuel peut servir à contrôler un export de conception ; un extrait audio ou vidéo sans contenu privé peut tester une notification de média. Il n’est pas nécessaire d’utiliser des données réelles pour tester que le bon document est joint.

Définissez une caractéristique vérifiable dans le fichier lui-même, par exemple une chaîne de texte réservée au test ou un enregistrement de démonstration. Après réception, comparez le fichier extrait avec le fichier attendu, ou vérifiez que le marqueur prévu est présent. Une simple confirmation de téléchargement ne suffit pas à démontrer que le contenu n’a pas été remplacé par une autre version.

Distinguez aussi les pièces jointes ordinaires des ressources intégrées au corps du message. Un logo affiché dans un message HTML, par exemple, peut être transmis comme ressource intégrée plutôt que comme document que l’on ouvre depuis la liste des pièces jointes. Le résultat visible dépend de la structure du message et de la manière dont le logiciel de réception la présente ; ne testez donc pas seulement l’apparence dans une interface.

Pour les produits qui acceptent des fichiers fournis par des utilisateurs, séparez le test du traitement de ce fichier de celui du courriel envoyé. Le guide OWASP sur les téléversements recommande de ne pas se fier uniquement à l’extension, et traite notamment de la validation des types et des limites de taille. Ce guide porte sur la sécurité des téléversements, pas sur une norme de pièce jointe électronique ; servez-vous-en uniquement pour cadrer les contrôles de fichiers de votre application (guide OWASP sur les téléversements de fichiers). Pour éviter de faire circuler des documents réels dans l’environnement de test, vous pouvez également consulter notre page sur la protection de la vie privée.

Déclenchez l’envoi et reliez les résultats au même essai

Effectuez l’opération depuis l’environnement de développement ou de préproduction de votre propre produit. Associez chaque essai à une référence exploitable : identifiant de scénario, événement métier ou identifiant de corrélation déjà utilisé par votre application. Évitez d’inscrire des données personnelles dans cette référence.

Vérifiez ensuite que le parcours métier a choisi le bon document. Si la fonction envoie un rapport, assurez-vous que le rapport correspond à l’utilisateur fictif et à la période prévus par le scénario. Si elle envoie une facture, contrôlez que le fichier vient de la commande de test, et non d’un document mis en cache ou d’un ancien export.

Consignez les observations sans les fusionner :

  • le résultat de génération et le chemin logique suivi par l’application ;
  • le nom et le type attendus pour le fichier ;
  • la réponse du composant d’envoi ou du relais ;
  • le résultat de l’inspection du message brut ;
  • le résultat observé dans la boîte de réception contrôlée.

Cette trace aide à localiser une régression. Si le document n’existe déjà pas à l’étape de génération, inspecter le message ne résoudra pas le problème. Si le fichier est présent dans le message brut mais absent de l’interface de réception, le défaut peut se situer après la génération : interprétation du message, présentation ou réception. Il faut alors conserver les éléments de preuve de chaque étape avant de conclure.

Inspectez la structure MIME au lieu de vous fier à l’apparence

Le format MIME décrit la façon dont un message peut contenir du texte et plusieurs parties. RFC 2045 définit les mécanismes de formatage et les encodages de transfert ; RFC 2046 décrit notamment les structures multiparties et plusieurs types de sous-parties (RFC 2045 et RFC 2046). Ces normes permettent d’examiner la structure du message ; elles ne garantissent pas qu’une boîte particulière accepte, affiche ou télécharge un fichier.

Dans le message brut ou l’objet structuré fourni par votre environnement, recherchez une partie distincte du corps et vérifiez :

  • que la structure multipartie correspond à ce que votre application est censée envoyer ;
  • que la partie attendue existe et contient bien une charge utile ;
  • que le type de média est cohérent avec le fichier prévu ;
  • que l’indication de disposition et le nom de fichier correspondent à l’intention du produit ;
  • que le contenu décodé correspond au fichier source attendu.

RFC 2045 documente les valeurs d’encodage de transfert telles que 7bit, 8bit, binary, quoted-printable et base64. Les voir dans un message n’est pas en soi un défaut : le contrôle utile consiste à décoder la partie selon l’encodage annoncé, puis à comparer les octets obtenus avec le document de test. Évitez de comparer naïvement le texte brut de la partie à un fichier binaire ; sa représentation dans le message peut être encodée.

RFC 2046 décrit plusieurs sous-types multiparties, notamment mixed, alternative, digest, parallel et related. Ils remplissent des rôles différents : un message peut associer un corps et une pièce jointe, proposer plusieurs représentations du corps ou intégrer une ressource associée au contenu. Ne supposez pas qu’un seul schéma de parties conviendra à chaque fonction. Comparez la structure observée à ce que votre produit veut réellement envoyer.

Pour la pièce jointe, RFC 2183 documente les informations de disposition telles que attachment et inline, ainsi que le paramètre de nom de fichier (RFC 2183). Contrôlez ces informations à l’endroit où elles s’appliquent à la partie concernée. RFC 2047 concerne, entre autres, l’encodage de certains champs d’en-tête textuels ; ne l’utilisez pas comme explication générale de l’encodage du paramètre de nom de fichier d’une pièce jointe (RFC 2047).

Comment vérifier que le fichier est bien joint au message ?

Ouvrez le message brut ou examinez sa représentation MIME, puis repérez la partie correspondant au fichier attendu. Vérifiez ses métadonnées et son contenu décodé. Si vous ne disposez que d’un journal de l’application, vous pouvez confirmer le choix du fichier ou l’appel d’envoi, mais pas démontrer à vous seul que le message transporté contenait la pièce jointe.

Vérifiez la réception dans une boîte maîtrisée

L’inspection du MIME confirme la composition du message observé ; elle ne remplace pas une réception réelle lorsque l’objectif consiste à valider le parcours du destinataire. Envoyez le message à une cible de test que vous contrôlez et vérifiez l’arrivée du message, la présence de la pièce jointe et sa lisibilité. Une adresse de test dédiée évite de mélanger les essais avec des courriels personnels ou des échanges de production.

Pour les fichiers lisibles, ouvrez le document reçu et cherchez le marqueur prévu. Pour un fichier dont le format n’est pas directement lisible, téléchargez-le et comparez-le au fichier produit par le test. Si le document comporte des données structurées, vérifiez quelques valeurs propres au scénario. Le test doit détecter une pièce jointe vide, tronquée, remplacée ou produite depuis le mauvais enregistrement, pas seulement confirmer qu’un nom de fichier apparaît.

Ne présumez pas qu’un service de réception temporaire permet nécessairement d’accepter, d’afficher ou de télécharger des pièces jointes. Ces capacités varient et doivent être confirmées sur l’interface ou par un essai réel avant d’en dépendre. De même, la présence d’un courriel dans une boîte contrôlée démontre le résultat pour cette destination et cet essai ; elle ne constitue pas une garantie de réception pour d’autres services ou en production.

Si vous comparez plusieurs méthodes, évaluez-les selon la preuve qu’elles procurent :

  • Une capture locale est pertinente pour inspecter rapidement la structure et automatiser des contrôles, mais elle ne démontre pas une réception par une boîte réelle.
  • Un environnement de réception contrôlé permet de vérifier l’apparition et l’ouverture du fichier, mais dépend des fonctions effectivement disponibles dans cet environnement.
  • Une adresse durable de l’équipe facilite le suivi des échanges qui doivent être conservés, mais expose davantage une boîte de travail aux messages de test et aux données de diagnostic.

Le contrôle du MIME suffit-il à valider la pièce jointe ?

Non, si l’exigence porte sur l’expérience réelle du destinataire. Le MIME peut prouver qu’une partie est présente dans le message inspecté ; il ne prouve pas que la boîte de réception l’a acceptée, présentée comme attendu ou rendue téléchargeable. À l’inverse, une pièce jointe affichée dans l’interface ne confirme pas toujours, à elle seule, que son contenu est identique au fichier produit. Pour une validation complète, combinez les deux vérifications.

Que faire si le message arrive sans pièce jointe ?

Reprenez le parcours sans sauter d’étape. Confirmez d’abord que le bon fichier a été généré et sélectionné. Inspectez ensuite le message brut : si aucune partie correspondant à la pièce jointe n’y figure, recherchez le défaut du côté de la construction du message. Si la partie existe mais que l’interface ne montre rien, téléchargez le message brut ou passez par une autre méthode d’inspection disponible dans votre environnement contrôlé. Conservez les en-têtes utiles, la structure MIME et l’identifiant de l’essai pour reproduire le cas.

Choisissez la profondeur de contrôle avec des conditions explicites

La bonne stratégie dépend de ce que le changement pourrait casser. Nous utilisons ces conditions pour éviter de payer le coût d’un contrôle manuel à chaque test tout en conservant une preuve de réception lorsqu’elle est nécessaire :

  • Si le changement ne porte que sur la génération du document, choisissez un test automatisé du fichier, avec comparaison de son contenu attendu. Ajoutez l’inspection MIME si le code de composition du message est aussi concerné.
  • Si le changement porte sur l’ajout, le nom ou le type de la pièce jointe, contrôlez le message MIME et son contenu décodé. Ne vous contentez pas du statut de l’appel d’envoi.
  • Si l’acceptation exige qu’un destinataire puisse ouvrir ou télécharger le document, passez à une réception contrôlée et comparez le fichier reçu au fichier source.
  • Si la boîte ou le service choisi ne confirme pas qu’il prend en charge les pièces jointes, ne retenez pas son résultat comme preuve. Utilisez un autre environnement maîtrisé, ou limitez explicitement la conclusion à la génération et au message MIME.
  • Si le parcours implique des données réelles, des comptes sensibles ou une conservation durable, n’utilisez pas une adresse temporaire comme boîte de référence. Choisissez une boîte de test gouvernée par l’équipe et conforme à vos règles de rétention.

Pour confirmer que le contenu reçu n’a pas été altéré, comparez le fichier extrait à celui créé par le scénario, ou vérifiez les données attendues après ouverture. Une empreinte calculée de façon identique sur les deux fichiers peut renforcer cette comparaison si votre chaîne de test sait la produire ; une différence doit mener à examiner la génération, l’encodage, l’extraction et le téléchargement avant d’attribuer la cause à un composant précis.

Enregistrez les échecs et rejouez le scénario après correction

Pour chaque échec, conservez une reproduction minimale avec le fichier fictif, la référence de l’essai et les observations de chaque étape. Une pièce jointe manquante demande de vérifier si elle a été générée, sélectionnée, puis ajoutée au MIME. Un nom ou un type incorrect oriente vers la construction des métadonnées. Un fichier présent mais illisible nécessite de comparer le contenu d’origine au contenu extrait et de vérifier le décodage annoncé.

Après correction, rejouez le scénario concerné et les contrôles voisins qui peuvent dépendre du même chemin de code. Si le défaut touchait un export de rapport, vérifiez un autre cas d’export pris en charge par le produit. Si le message combinait un corps HTML et un fichier, vérifiez que la correction n’a pas transformé une ressource intégrée en pièce jointe ordinaire, ou l’inverse.

Consignez enfin la limite de l’essai : « fichier généré et MIME conforme » n’équivaut pas à « accepté par tous les destinataires ». Même une réception contrôlée ne certifie pas les comportements de toutes les interfaces ni la distribution en production. La documentation de votre test doit préciser l’environnement et la preuve obtenue, plutôt que généraliser à partir d’un seul résultat.

Pour un essai sans information sensible, une boîte de test contrôlée peut compléter ce protocole. Avant d’utiliser FwdBay comme destination de test, vérifiez sur la page du service que la réception et l’inspection des pièces jointes nécessaires à votre scénario sont effectivement prises en charge ; nous ne déduisons pas cette capacité de la seule prise en charge des messages. Si une adresse temporaire convient à cet essai, elle peut éviter d’exposer une boîte professionnelle et d’y accumuler des messages de test. Pour les documents qui doivent être conservés, les échanges nécessitant une réponse ou les comptes importants à récupérer plus tard, préférez une adresse durable de l’équipe.