Un registro SPF es un único registro DNS de tipo TXT cuyo contenido comienza por v=spf1 y está formado por mecanismos con calificadores opcionales y modificadores, evaluados de izquierda a derecha hasta el primer match. La norma que lo define es RFC 7208, publicada en abril de 2014, y basta un solo error de sintaxis para que la función check_host() devuelva PermError y la autenticación falle por completo.
El estándar define ocho mecanismos divididos en dos grupos: básicos (all e include) y de remitente designado (a, mx, ptr, ip4, ip6, exists). Los más utilizados en registros reales son include, ip4, ip6 y all. ip4 e ip6 son los únicos sin coste DNS, ya que comparan directamente la IP del cliente contra una red literal. include:domain evalúa recursivamente el registro del dominio indicado y solo produce match si devuelve Pass; un -all dentro del registro incluido no implica Fail en el registro exterior. exists permite autorización dinámica cuando se combina con macros, técnica usada por proveedores como Salesforce.
Los calificadores son un único carácter prefijado: + (Pass, por defecto), - (Fail), ~ (Softfail) y ? (Neutral). La elección práctica se reduce a -all frente a ~all al final del registro; se recomienda -all cuando ya se aplican también DKIM y DMARC, y ~all mientras se descubren remitentes legítimos. El mecanismo ptr aparece marcado en el propio RFC como «do not use» por su lentitud y la carga que impone a los servidores .arpa.
Los modificadores son pares nombre=valor que aportan información sin participar en la evaluación. RFC 7208 define dos: redirect=, que delega toda la evaluación en otro dominio tras agotar los mecanismos, y exp=, que envía una explicación cuando el resultado es Fail. Cualquier modificador no reconocido se ignora; un redirect= o exp= duplicado genera PermError. La evaluación completa está limitada a un máximo de 10 consultas DNS antes de devolver PermError, según §4.6.4.
