§2 · SPF
SPF — Sender Policy Framework.
SPF (RFC 7208) est une liste publique d'adresses IP autorisées à envoyer des emails au nom de votre domaine. Vous la publiez sous forme d'un unique enregistrement TXT sur votre domaine d'envoi. Quand un mailbox provider reçoit un message prétendant provenir de @yourcompany.com, il consulte l'enregistrement SPF sur yourcompany.com et demande : ce message provient-il d'une des IP listées ? Si oui, SPF passe. Sinon, SPF échoue.
La syntaxe
v=spf1 include:amazonses.com ~all
Se lit ainsi : « SPF version 1, autoriser tout ce qu'Amazon SES autorise, soft-fail tout le reste. » Le ~all en fin de chaîne est la clause catch-all. ~all = soft-fail (marquer suspect mais accepter), -all = hard-fail (rejeter), ?all = neutre (pas d'avis). Utilisez ~all jusqu'à ce que DMARC soit en bonne santé, puis durcissez en -all.
Plusieurs expéditeurs (par ex. Google Workspace pour le sortant + SES pour le marketing + Mailgun pour le transactionnel) se chaînent avec plusieurs mécanismes include: :
v=spf1 include:_spf.google.com include:amazonses.com include:mailgun.org ~all
La limite des 10 lookups DNS. La RFC 7208 §4.6.4 plafonne la résolution SPF à 10 lookups DNS au total. Chaque include: en compte un. Échec courant : chaîner 5 vendeurs ou plus et dépasser la limite, après quoi SPF résout en permerror et est traité comme fail. Auditez avec dig TXT yourcompany.com + un SPF flattener si vous êtes proche de la limite.
SPF dans AcelleMail
Le modèle SendingDomain de AcelleMail expose getSpf() dans app/Model/SendingDomain.php:154, qui lit le paramètre global spf_record et restitue la valeur de l'enregistrement TXT. La méthode verifySpf(string $ipOrHostname) ligne 363 enveloppe la bibliothèque Mika56\SPFCheck — elle interroge le DNS en direct au runtime et asserte RESULT_PASS. La surface de vérification dans l'admin UI s'affiche en vert quand l'enregistrement est présent et autorise l'IP d'envoi, en rouge sinon.
Astuce pratique : SPF n'authentifie que l'envelope sender (le MAIL FROM au niveau SMTP), pas le From-header visible. C'est précisément cette distinction que l'alignement DMARC corrige — voir §4.