Ek A. Toplu ABNF

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>