6. Değiştirici Tanımları

Değiştiriciler ek bilgi sağlayan isim/değer çiftleridir. Değiştiriciler daima isim ve değeri ayıran bir "=" imi içerirler.

Bu belgede tanımlanmış değiştiriciler ("redirect" ve "exp") kaydın her yerinde görünebilir *SEÇİMLİK* fakat sonda, tüm mekanizmalardan sonra görünürse iyi olur *ÖNERİ*. Bu iki değiştirici arasında bir öncelik sözkonusu değildir. Bu iki değiştiricinin her biri bir kayıtta birden fazla görünemez *ZORUNLU*. Eğer bu yapılırsa, check_host() işlevi "PermError" sonucu ile çıkar.

Tanınmayan değiştiriciler nerede nasıl göründüklerine bakılmaksızın yok sayılmalıdırlar *ZORUNLU*. Bu, bu belgenin gerçeklenimcilerine diğer belirtimlerde tanımlanmış değiştiricileri içeren kayıtlarla rahatça çalışma imkanı verir.

6.1. Yönlendirilmiş Sorgu (redirect)

Eğer tüm mekanizmalar eşleşmez ve bir "redirect" değiştiricisi de mevcutsa süreç şöyle gelişir:

sevket           = "redirect" "=" alan-belirtimi

Sevket belirtiminin alan-belirtimi bölümü Makrolar bölümündeki makro kurallarına göre yorumlanır. Sonuçlanan dizge check_host() işlevinde <alan> olarak değerlendirilir, <ip> ve <gönderici> ise o anki değerlendirme değerleri olarak değişmeden kalır.

Bu yeni check_host() değerlendirmesinin sonucu, bir SPF kaydının yokluğu dışında mevcut değerlendirmenin sonucu sayılır ya da <hedef-ismi> bozuksa, sonuç "None"'dan ziyade bir "PermError" olur.

Yönlendirme sonucu sorgulanan alanın kendisinin de bir yönlendirme belirtebileceğine dikkat ediniz.

Bu oluşum, aynı kaydı çok sayıda alana uygulamak isteyen bir örgüt tarafından kullanılmak üzere tasarlanmıştır. Örnek:

la.example.com. TXT "v=spf1 redirect=_spf.example.com"
ny.example.com. TXT "v=spf1 redirect=_spf.example.com"
sf.example.com. TXT "v=spf1 redirect=_spf.example.com"
_spf.example.com. TXT "v=spf1 mx:example.com -all"

Bu örnekte, bu üç alanın her birine ait posta için aynı kayıt kullanılmaktadır. Bu yönetimsel bir yarar sağlayabilir.

Bilginize

Genelde, aynı yönetimsel denetim altında olmayan "B" alanına "A" alanı tarafından yapılan bir yönlendirme güvenilir olmayacaktır. <gönderici> aynı kaldığından, özellikle "B" alanının yerel kısımlarla ilgili mekanizmaları kullanması durumunda, "B" alanındaki kaydın "A" alanındaki posta kutuları için doğru çalışacağının hiçbir garantisi yoktur. Bir "include" yönergesi daha uygun olabilirdi.

Bir "redirect" değiştiricisinin bir kaydın en sonunda yer alması tavsiye edilir *ÖNERİ*.

6.2. İzahat (exp)

izahat           = "exp" "=" alan-belirtimi

Eğer tüm mekanizmaların eşleşmemesinin sonucu olarak check_host() işlevi "Fail" sonucunu verirse ve bir "exp" değiştiricisi de mevcutsa izahat-dizgesi aşağıda açıklandığı gibi hesaplanır. Eğer bir "exp" değiştiricisi de mevcut değilse ya öntanımlı bir izahat-dizgesi ya da boş bir izahat-dizgesi dönebilir.

<alan-belirtimi>Makrolar bölümündeki makro kurallarına göre yorumlanır ve <hedef-ismi> haline gelir. <hedef-ismi> için DNS TXT kaydı sorgulanır.

<alan-belirtimi> boşsa veya bir DNS hatası dönmüşse (0'dan farklı bir RCODE) ya da hiç kayıt dönmemişse, ya da birden fazla kayıt dönmüşse veya izahat-dizgesi nde bir sözdizimi hatası varsa, hiç "exp" değiştiricisi verilmemiş gibi işlem yapılır.

Alınan TXT kayıtlarındaki dizgeler aralarına boşluk konmaksızın ardarda eklenir ve makro yorumlamalı bir <izahat-dizgesi> olarak ele alınır. Gerçeklenimler <izahat-dizgesi>nin sonuç uzunluğunu makul işlem sınırları veya diğer protokol kısıtlamalarına izin vermek için sınırlayabilirler. <izahat-dizgesi> bir SMTP yanıtı olarak tasarlandığından ve [RFC2821]'in Sözdizimsel Genel Prensipler ve Harekât Modeli bölümü yanıtların [US-ASCII] olmasını gerektirdiğinden, <izahat-dizgesi> de US-ASCII kodlanmış olmalıdır.

check_host() işlevini değerlendiren yazılım, bu dizgeyi, yayınlayan alandaki bilgiyi bir kısa ileti veya bir URL biçiminde iletmek için kullanabilir. Yazılım bu dizgenin üçüncü şahıslardan kaynaklandığını açıklığa kavuşturmalıdır *ÖNERİ*. Örneğin, dizgenin başına Fail bölümünde gösterildiği gibi "%{o} explains: " makro dizgesini ekleyebilir.

example.com'un şöyle bir kaydı olsun:

v=spf1 mx -all exp=explain._spf.%{d}

Aşağıda explain._spf.example.com'da <izahat-dizgesi> olarak kullanılabilecek olası TXT kayıtları örneklerine yer verilmiştir:

"Mail from example.com should only be sent by its own servers."
    -- basit ve sabit bir ileti

"%{i} is not one of %{d}'s designated mail servers."
    -- sınaması başarısız olan IP adresini içererek biraz daha bilgi
       veren bir ileti

"See http://%{d}/why.html?s=%{S}&i=%{I}"
    -- check_host() işlevine bağımsız değişkenler içeren bir URL'den oluşan
       biraz daha karmaşık bir ileti; böylece daha ayrıntılı ve
       özel talimatlar içeren bir sayfa hazırlanabilir

Bilginize

Bir "include" mekanizmasına yineleme sırasında, <hedef-ismi>'ndeki bir "exp" değiştiricisi kullanılmamalıdır *ZORUNLU*. Aksine, bir "redirect" değiştiricisi değerlendirilirken özgün alandaki bir "exp" değiştiricisi kullanılmamalıdır *ZORUNLU*.