Aller au contenu principal

5. Résolution d'adresse et traitement du courrier (Address Resolution and Mail Handling)

Cette section décrit comment les clients SMTP déterminent où livrer les messages de courrier et comment le processus de livraison devrait être géré.

5.1. Localisation de l'hôte cible (Locating the Target Host)

Lorsqu'un client SMTP livre du courrier à un domaine particulier, il doit déterminer l'hôte de destination approprié. Ce processus utilise le système de noms de domaine (Domain Name System, DNS) et suit ces étapes :

Étape 1 : Recherche des enregistrements MX

Interroger le DNS pour les enregistrements d'échangeur de courrier (Mail eXchanger, MX) du domaine de destination :

$ dig example.com MX

;; ANSWER SECTION:
example.com. 3600 IN MX 10 mail1.example.com.
example.com. 3600 IN MX 20 mail2.example.com.
example.com. 3600 IN MX 30 mail3.example.com.

Étape 2 : Trier par priorité

Trier les enregistrements MX par priorité (nombre inférieur = priorité supérieure) :

  1. mail1.example.com (priorité 10)
  2. mail2.example.com (priorité 20)
  3. mail3.example.com (priorité 30)

Étape 3 : Tentative de livraison

Tenter de se connecter à chaque hôte par ordre de priorité :

  1. Tenter de se connecter au MX de priorité la plus élevée (nombre le plus bas)
  2. Si la connexion échoue, essayer le niveau de priorité suivant
  3. Continuer jusqu'à succès ou épuisement de tous les hôtes MX

Étape 4 : Repli sur les enregistrements A/AAAA

Si aucun enregistrement MX n'existe, traiter le domaine lui-même comme serveur de courrier :

  • Rechercher les enregistrements A (IPv4) ou AAAA (IPv6)
  • Tenter une connexion directe à cette adresse IP

Important : Si des enregistrements MX existent mais tous échouent, NE PAS (MUST NOT) revenir aux enregistrements A/AAAA.

Algorithme détaillé

1. Interroger les enregistrements MX pour le domaine de destination
2. Si des enregistrements MX sont trouvés :
a. Retirer tout MX pointant vers "." (MX nul)
b. Trier les MX restants par priorité
c. Pour chaque niveau de priorité (en commençant par le nombre le plus bas) :
i. Résoudre tous les hôtes MX à ce niveau de priorité en adresses IP
ii. Mélanger aléatoirement les hôtes de même priorité
iii. Tenter de se connecter à chaque hôte
iv. Si la connexion réussit, livrer le courrier
v. Si tous les hôtes à ce niveau de priorité échouent, essayer la priorité suivante
d. Si tous les hôtes MX échouent, reporter la livraison (échec transitoire)
3. Si aucun enregistrement MX n'est trouvé :
a. Interroger les enregistrements A/AAAA pour le domaine
b. Tenter une connexion directe à l'IP du domaine
c. Si la connexion échoue, reporter la livraison
4. Si le domaine ne se résout pas :
- Retourner un échec permanent (code 5xx)

Meilleures pratiques

  1. Respecter TTL : Mettre en cache les résultats DNS selon les valeurs TTL
  2. Délais de connexion : Utiliser des délais raisonnables (par exemple, 5 minutes pour la connexion initiale)
  3. Logique de nouvelle tentative : Pour les échecs transitoires (4xx), réessayer périodiquement
  4. Équilibrage de charge : Pour les enregistrements MX de même priorité, randomiser la sélection
  5. Support IPv6 : Essayer à la fois les enregistrements A et AAAA
  6. Gestion des erreurs : Distinguer les échecs transitoires des échecs permanents

5.2. IPv6 et enregistrements MX (IPv6 and MX Records)

Lors de la résolution des noms d'hôte MX, les clients DEVRAIENT (SHOULD) :

  1. Interroger à la fois les enregistrements A (IPv4) et AAAA (IPv6)
  2. Préférer IPv6 si les deux sont disponibles (dépendant de l'implémentation)
  3. Revenir à IPv4 si la connexion IPv6 échoue

Exemple :

mail.example.com a :
A 192.0.2.1
AAAA 2001:db8::1

Processus :
1. Essayer IPv6 : 2001:db8::1
2. Si échec, essayer IPv4 : 192.0.2.1

Littéraux d'adresse IPv6

SMTP prend en charge les littéraux d'adresse IPv6 dans MAIL FROM et RCPT TO :

Format : user@[IPv6:2001:db8::1]

Exemple :

C: MAIL FROM:<sender@[IPv6:2001:db8::1]>
S: 250 Ok

Considérations double pile

  1. Happy Eyeballs : Essayer IPv6 et IPv4 en parallèle avec un léger retard
  2. Gestion des délais : Ne pas laisser les tentatives IPv6 retarder excessivement IPv4
  3. Préférences : Permettre la configuration des préférences IPv4/IPv6
  4. Repli : Toujours avoir un repli IPv4 pour la compatibilité