Bu bölüm uyulması zorunlu bölümlendendir ve önceki metindeki ABNF dizilimleri ile ilgili her çelişki bu dilbilgisinin yardımıyla çözümlenir.
ABNF gösterimi için [
RFC4234]'e bakınız. Bu ABNF tanımına göre, dizgesel sabitlerin (tırnak içine alınmış olanlar) harf büyüklüğüne duyarsız oluşuna lütfen dikkat ediniz. Yani, "mx" ile "mx", "MX", "mX" ve "Mx" eşleşir.
kayıt = sürüm terimler *BOŞLUK
sürüm = "v=spf1"
terimler = *( 1*BOŞLUK ( yönerge / değiştirici ) )
yönerge = [ niteleyici ] mekanizma
niteleyici = "+" / "-" / "?" / "~"
mekanizma = ( tümü / dahili
/ A / MX / PTR / IP4 / IP6 / exists )
tümü = "all"
dahili = "include" ":" alan-belirtimi
A = "a" [ ":" alan-belirtimi ] [ çifte-cidr-uzun ]
MX = "mx" [ ":" alan-belirtimi ] [ çifte-cidr-uzun ]
PTR = "ptr" [ ":" alan-belirtimi ]
IP4 = "ip4" ":" ip4-ağı [ ip4-cidr-uzun ]
IP6 = "ip6" ":" ip6-ağı [ ip6-cidr-uzun ]
mevcut = "exists" ":" alan-belirtimi
değiştirici = sevket / izahat / bilinmeyen-değiştirici
sevket = "redirect" "=" alan-belirtimi
izahat = "exp" "=" alan-belirtimi
bilinmeyen-değiştirici = isim "=" makro-dizgesi
ip4-cidr-uzun = "/" 1*RAKAM
ip6-cidr-uzun = "/" 1*RAKAM
çifte-cidr-uzun = [ ip4-cidr-uzun ] [ "/" ip6-cidr-uzun ]
ip4-ağı = dörtlü "." dörtlü "." dörtlü "." dörtlü
dörtlü = RAKAM ; 0-9
/ %x31-39 RAKAM ; 10-99
/ "1" 2RAKAM ; 100-199
/ "2" %x30-34 RAKAM ; 200-249
/ "25" %x30-35 ; 250-255
; bilinen noktalı dörtlü gösterim, 192.0.2.0 gibi
ip6-ağı = <[RFC3513], 2.2. bölüme göre>
; örn, 2001:DB8::CD30
alan-belirtimi = makro-dizgesi alan-sonu
alan-sonu = ( "." tepeyafta [ "." ] ) / makro-genleş
tepeyafta = ( *harfrakam HARF *harfrakam ) /
( 1*harfrakam "-" *( harfrakam / "-" ) harfrakam )
; HRT kuralı artı ek TLD kısıtlamaları
; (bkz, [RFC3696], 2. Bölüm)
harfrakam = HARF / RAKAM
izahat-dizgesi = *( makro-dizgesi / SP )
makro-dizgesi = *( makro-genleş / makro-sabiti )
makro-genleş = ( "%{" makro-harfi dönüştürücüler *ayraç "}" )
/ "%%" / "%_" / "%-"
makro-sabiti = %x21-24 / %x26-7E
; "%" hariç görünür karakterler
makro-harfi = "s" / "l" / "o" / "d" / "i" / "p" / "h" /
"c" / "r" / "t"
dönüştürücüler = *RAKAM [ "r" ]
ayraç = "." / "-" / "+" / "," / "/" / "_" / "="
name = HARF *( HARF / RAKAM / "-" / "_" / "." )
başlık-alanı = "Received-SPF:" [AKBOŞ] sonuç KBOŞ [açıklama KBOŞ]
[ anah-değer-list ] CRLF
sonuç = "Pass" / "Fail" / "SoftFail" / "Neutral" /
"None" / "TempError" / "PermError"
anah-değer-list = anah-değer-çifti *( ";" [AKBOŞ] anah-değer-çifti )
[";"]
anah-değer-çifti = anahtar [AKBOŞ] "=" ( nokta-atom / tırnaklı-dizge )
anahtar = "client-ip" / "envelope-from" / "helo" /
"problem" / "receiver" / "identity" /
mekanizma / "x-" isim / isim
kimlik = "mailfrom" ; "MAIL FROM" kimliği için
/ "helo" ; "HELO"kimliği için
/ isim ; diğer kimlikler
nokta-atom = <[RFC2822]'ye göre tırnaksız sözcük>
tırnaklı-dizge = <[RFC2822]'ye göre tırnaklı dizge>
açıklama = <[RFC2822]'ye göre açıklama dizgesi>
AKBOŞ = <[RFC2822]'ye göre açıklamalı katlama boşlukları>
KBOŞ = <[RFC2822]'ye göre katlama boşlukları>
CRLF = <[RFC2822]'ye göre standart satır sonu dizgeciği>