§2 · SPF
SPF — Sender Policy Framework.
SPF (RFC 7208) es una lista pública de direcciones IP autorizadas a enviar email en nombre de su dominio. La publica como un único registro TXT en su dominio de envío. Cuando un proveedor de buzón recibe un mensaje que dice provenir de @yourcompany.com, consulta el registro SPF de yourcompany.com y pregunta: ¿ha llegado este mensaje desde una de las IPs listadas? Si la respuesta es sí, SPF pasa. Si es no, SPF falla.
La sintaxis
v=spf1 include:amazonses.com ~all
Se lee como: «SPF versión 1, autoriza todo lo que autoriza Amazon SES, soft-fail cualquier otra cosa». El ~all del final es la cláusula comodín. ~all = soft-fail (marca sospechoso pero acepta), -all = hard-fail (rechaza), ?all = neutral (sin opinión). Use ~all hasta que DMARC esté sano y luego apriete a -all.
Para varios remitentes (p. ej. Google Workspace para el correo saliente + SES para marketing + Mailgun para transaccional), encadene varios mecanismos include::
v=spf1 include:_spf.google.com include:amazonses.com include:mailgun.org ~all
El límite de 10 consultas DNS. El RFC 7208 §4.6.4 limita la resolución de SPF a 10 consultas DNS en total. Cada include: cuenta como una. Un fallo habitual: encadenar 5 o más proveedores y rebasar el límite, tras lo cual SPF resuelve a permerror y se trata como fallo. Audite con dig TXT yourcompany.com + un flattener de SPF si está cerca del límite.
SPF en AcelleMail
El modelo SendingDomain de AcelleMail expone getSpf() en app/Model/SendingDomain.php:154, que lee el ajuste global spf_record y renderiza el valor del registro TXT. El método verifySpf(string $ipOrHostname) en la línea 363 envuelve la librería Mika56\SPFCheck: consulta el DNS en vivo en tiempo de ejecución y verifica RESULT_PASS. La superficie de verificación en la UI de administración se pone verde cuando el registro está presente y autoriza la IP de envío, y roja en caso contrario.
Truco práctico: SPF solo autentica el remitente del sobre (el MAIL FROM a nivel SMTP), no la cabecera From visible. Esa distinción es lo que la alineación DMARC corrige: vea §4.