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>