Récupérer le code, les liens et les en-têtes d'un message
Chaque message reçu arrive avec son code à usage unique, ses liens et ses en-têtes déjà extraits, sans rien configurer.
Un test n'a presque jamais besoin du corps d'un email. Il a besoin d'une chose dans le corps : un code à six chiffres, un lien de confirmation, un jeton. Nous l'extrayons à la réception, et vous la lisez dans un champ. Il n'y a rien à configurer.
Les champs que vous obtenez
| Champ | Ce qu'il porte |
|---|---|
otp |
Le code à usage unique que nous jugeons le plus probable, ou rien |
codes |
Tous les nombres de 4 à 8 chiffres isolés dans le message, le meilleur candidat en premier |
links |
Chaque lien du message, déséchappé, dans l'ordre d'apparition, la partie HTML d'abord |
headers |
Les en-têtes, en minuscules, dans la lecture d'un seul message |
textBody / htmlBody |
Les deux versions du corps, telles qu'envoyées, dans la lecture d'un seul message |
Suivre un lien sans le déséchapper vous-même
Un lien écrit dans du HTML porte des entités : & là où l'URL a un &. Un test
qui suit un lien encore échappé demande au serveur une URL dont le second paramètre
s'appelle amp;next. Il reçoit alors une page qui n'est pas celle qu'il attendait, et
aucune erreur ne le signale.
Les liens que l'API renvoie sont déséchappés. Vous pouvez passer
message.links[0] directement à page.goto() ou à cy.visit().
Quand otp est vide et codes est rempli
otp est le code qui suit de plus près un mot qui annonce un code (« code »,
« vérification », « confirmation », « one-time »...), dans les soixante caractères qui le
précèdent. Sans mot annonceur, otp n'est renseigné que s'il n'y a qu'un seul candidat.
Quand le message contient plusieurs nombres et aucun mot annonceur, par exemple un
numéro de commande et un autre numéro à six chiffres, nous laissons otp vide et nous
mettons les candidats dans codes. Deviner lequel est le bon donnerait un test qui
passe jusqu'au jour où le numéro de commande change de longueur.
Dans ce cas, désignez la valeur dans un vrai message et laissez la plateforme écrire le motif : c'est le sujet de Pointeurs.
Corréler un message avec l'exécution qui l'a déclenché
Posez un en-tête dans l'email que votre application envoie (X-Test-Id,
X-Correlation-Id), et retrouvez-le tel quel :
const message = await api(`/v1/messages/${id}`);
const mine = message.headers['x-test-id'] === executionId;
Lisez la clé en minuscules, toujours. Un en-tête est insensible à la casse sur le fil : comparer la clé telle que vous l'avez envoyée donne un test qui marche jusqu'au jour où votre bibliothèque d'envoi change de capitalisation.
Limites connues
- Nous ne devinons pas votre format. Un identifiant maison ne ressemble à rien de connu. Utilisez un pointeur, voir Pointeurs.
- Les codes sont des nombres de 4 à 8 chiffres. Un code qui contient des lettres
n'apparaît pas dans
codes. - Nous ne lisons pas le contenu des pièces jointes. Vous obtenez leur nom, leur taille et leur empreinte, voir Lire depuis vos tests.
- Rien n'est extrait d'un message refusé. Quand une limite est atteinte, le message
est enregistré avec le statut
quota_exceededet n'est pas analysé, voir Quotas et rétention. - L'extraction a lieu après l'acquittement SMTP. Un message existe donc pendant
quelques millisecondes sans code ni liens. Lisez le champ
statusavant les champs extraits, voir Lire depuis vos tests.