Para uma verificação de SPF passar, o endereço IP de envio deve passar pelo menos um dos mecanismos. Os mecanismos de inclusão testam o endereço IP de entrada usando o registro SPF incluído e 'retornam' o resultado.
Usando seu exemplo:
a.example.com IN TXT "v=spf1 include:b.example.com +all"
b.example.com IN TXT "v=spf1 -all"
O registro incluído retornará falha, pois contém apenas um mecanismo -all
. No entanto, o primeiro registro será aprovado porque possui um mecanismo +all
.
Usando um exemplo mais detalhado:
a.example.com IN TXT "v=spf1 ip4:1.2.3.4 mx include:spf.example.org -all"
a.example.com IN MX 0 mailserver.example.com
mailserver.example.com IN A 1.2.3.5
spf.example.org IN TXT "v=spf1 ip4:4.3.0.0/16 -all"
Escreverei o resultado de cada mecanismo na mesma ordem em que estão especificados no registro. Então, os resultados serão formatados como tal:
- a.example.com:
[ip4] [mx] [include] [-all]
- spf.example.org:
[ip4] [-all]
Com os seguintes endereços de remetente:
1.2.3.4
- spf.example.org - > %código%
- a.example.com - > %código%
O resultado final será fail fail
, desde que pelo menos uma verificação tenha passado
1.2.3.5
- spf.example.org - > %código%
- a.example.com - > %código%
O resultado final será pass fail fail fail
, desde que pelo menos uma verificação tenha passado
4.3.10.20
- spf.example.org - > %código%
- a.example.com - > %código%
O resultado final será pass
, desde que pelo menos uma verificação tenha passado
TL; DR: O mecanismo de inclusão é avaliado separadamente e o resultado é passado novamente para a avaliação do registro que o incluiu. A avaliação de registro falha se nenhum mecanismo corresponder. Como você terminou seu exemplo com fail fail
, ele sempre corresponderá e, portanto, passará.