8. Makrolar
8.1. Makro Tanımları
Bazı mekanizma
lar ve değiştirici
ler terim parçaları üzerinde makro yorumlaması yaparlar.
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ç = "." / "-" / "+" / "," / "/" / "_" / "="
Yüzde imi "%%
" ile ifade edilir.
"%_
" makrosu tek bir " " (boşluk) olarak yorumlanır.
"%-
" makrosu "%20
" şeklinde bir URL kodlu boşluk olarak yorumlanır.
Terim bağımsız değişkenlerinde kullanılan makro harflerinin anlamları:
s = <gönderici> l = <gönderici>'nin yerel kısmı o = <gönderici>'nin alanı d = <alan> i = <ip> p = <ip>'nin doğrulanmış alan adı v = <ip> bir ipv4 ise "in-addr" dizgesi, bir ipv6 ise "ip6" dizgesi h = HELO/EHLO alanı
Sadece "exp
" metni içinde kullanılabilen makro harfleri:
c = SMTP istemci IP'si (kolayca okunabilir biçim) r = sınamayı yapan konağın alan adı t = o an ki zaman damgası
Bir yüzde imi '{
', '%
', '-
', '_
' karakterlerini öncelemekte kullanılmamışsa sözdizimi hatası olarak yorumlanır. Yani,
-exists:%(ir).sbl.spamhaus.example.org
yanlıştır ve check_host()
işlevinin "PermError
" döndürmesine sebep olur. Doğrusu şöyle olmalıdır:
-exists:%{ir}.sbl.spamhaus.example.org
İsteği bağlı dönüştürücüler:
*RAKAM = sıfır veya başka rakamlar 'r' = yedek değer, öntanımlı olarak noktalarla ayrılarak
Dönüştürücü
ler veya ayraç
lar kullanılmışsa, bir makro harfinin değeri parçalara ayrılır. Tersine bir işlem yürütüldükten sonra ve/veya sol taraf parçaları kaldırıldıktan sonra parçalar özgün ayraç karakterleri değil "." kullanılarak biraraya getirilirler.
Öntanımlı olarak dizgeler "." (nokta) kullanılarak birbirlerinden ayrılırlar. Baştaki, sondaki ve ardarda gelen ayraçların özel olarak ele alınmadığına ve dolayısıyla parça listelerinin boş dizgeler içermeyebileceğine dikkat ediniz. SPF'nin eski gerçeklenimleri alan isimlerinden sonra nokta konmasına izin vermezdi; dolayısıyla, alan sahiplerinin bu belgeyle uyumlu gerçeklenimlerce kabul edilebilmesi için böyle isimler yayınlamaması gerekir. Makrolarda "." yerine kullanılan ayraç karakterleri belirtilebilir.
'r'
dönüştürücüsü tersinir bir işlem belirtir: istemci IP'si 192.0.2.1 ise, %{i}
makrosu "192.0.2.1" üretirken, %{ir}
makrosu "1.2.0.192" üretir.
RAKAM
dönüştürücüsü kullanılacak sağ taraf parçalarının sayısını belirtir. Eğer bir RAKAM
belirtilmişse, değeri sıfır olmamalıdır *ZORUNLU*. Eğer hiç RAKAM
belirtilmemişse veya değer kullanılan parça sayısından fazlasını belirtiyorsa, kullanılabilecek bütün parçalar kullanılır. Eğer RAKAM
5 ise ve 3 parça varsa, makro RAKAM
'ın değeri 3'müş gibi yorumlanır. Gerçeklenimler bir alan ismindeki azami yafta sayısı olarak en azından 128 değerine destek vermelidiriler *ZORUNLU*.
"s
" makrosu <gönderici>
olarak yorumlanır. bir yerel kısım, de-imi ve bir alandan oluşan bir eposta adresidir. "l
" makrosu yerel-kısım
olarak yorumlanır. "o
" makrosu ise alan
olarak yorumlanır. bu değerlerin "include
" ve/veya "redirect
" nedeniyle ardışık yorumlama sırasında aynı kaldıklarına dikkat ediniz. Ayrıca, özgün <gönderici>
'de yerel-kısım
yoksa, yerine, ilk işlem sırasında "postmaster" getirileceğini unutmayınız (bkz, İlk İşlem).
IPv4 adresler için, "i
" ve "c
" makrolarının ikisi de standart noktalı dörtlü biçiminde yorumlanır.
IPv6 adresler için, "i
" makrosu noktalı biçimde bir adrestir ve %{ir}
kullanımı için tasarlanmıştır. "c
" makrosu ise [RFC3513]'ün 2.2. bölümünde belirtilen ikinoktalı onaltılık biçimli bir adres olarak yorumlanır ve insanların okuması için düşünülmüştür.
"p
" makrosu <ip>
'nin doğrulanmış alan adı olarak yorumlanır. Doğrulanmış alan adının bulunması "ptr
" bölümünde tanımlanmıştır. Eğer <alan>
doğrulanmış alan adları içindeyse, onun kullanılması gerekir *ÖNERİ*, yoksa, eğer <alan>
'ın bir alt alan adı varsa o kullanılmalıdır *ÖNERİ*. Aksi takdirde listedeki herhangi bir isim kullanılabilir. Eğer doğrulanmış bir alan adı yoksa veya bir DNS hatası oluşmuşsa, "unknown
" dizgesi kullanılır.
"r
" makrosu alıcı MTA'nın ismi olarak yorumlanır. Bunun tamamen nitelenmiş bir alan adı olması gerekir *ÖNERİ*, fakat böyle bir isim yoksa (sınama bir MUA tarafından yapılıyorsa) veya sınama önlemleri belirtilmemesini gerektiriyorsa, "unknown
" dizgesi kullanılmalıdır *ÖNERİ*. Alan adı, istemci MTA'nın alıcı MTA'yı bulmak için kullandığı MX kaydında bulunan isimden farklı olabilir.
"t
" makrosu, onluk tabanda, mutlak zaman başlangıcından beri (UTC olarak, 1 Ocak 1970 geceyarısından itibaren) geçen saniye sayısı olarak yorumlanır. Bu, standartlarla uyumlu çoğu kütüphanede bulunan POSIX time()
işlevinden dönen değerdir.
Makro yorumunun sonucu bir alan adı sorgusunda kullanılırken, eğer yorumlanmış alan adı 253 karakteri (azami alan adı uzunluğu) aşıyorsa, baştan itibaren 253 karakter alınır.
Büyük harfli makrolar küçük harfli eşdeğerleri olarak yorumlanır ve bundan sonra URL öncelenir. [RFC3986]'da tanımlanmış "urice" karakter kümesinde bulunmayan karakterlere URL öncelemesi uygulanmalıdır.
Bilginize
Meşru eposta için makro yorumlaması sırasında DNS yaftalarında 63 karakterlik sınırın aşılamayacağına dikkat ediniz. Eposta adreslerinin yerel kısımlarında ise noktalar arasındaki dizgecikler 63 karakterden uzun olabilir.
Bilginize
Alanlar, herhangi bir mekanizma yönergesi ile birlikte "s
", "l
", "o
" veya "h
" makrosunu kullanmaktan kaçınmalıdırlar. Bu makrolar çok güçlü olduklarından ve kullanıcı temelinde kayıt yayınlamayı mümkün kıldıklarından check_host()
sonucunu arabellekleyen gerçeklenimlerin yeteneklerini epeyce sınırlarlar ve DNS arabelleklerinin etkinliğini azaltırlar.
"s
", "l
", "o
" veya "h
" makrorusun içeren bir check_host()
değerlendirmesi sırasında işlenen bir yönerge yoksa, değerlendirme sonucu, tüm DNS kayıtlarının uyması gereken en kısa yaşam süresince (TTL) sadece <alan>
ve <ip>
temelinde arabelleklenebilir.
8.2. Makro Yorumlama Örnekleri
<gönderici>
strong-bad@email.example.com, IPV6 SMTP istemcisi 192.0.2.3, IPV4 SMTP istemcisi 2001:DB8::CB01 ve istemci IP'nin PTR alan adı mx.example.org olmak üzere:
makro yorumu ------- ---------------------------- %{s} strong-bad@email.example.com %{o} email.example.com %{d} email.example.com %{d4} email.example.com %{d3} email.example.com %{d2} example.com %{d1} com %{dr} com.example.email %{d2r} example.email %{l} strong-bad %{l-} strong.bad %{lr} strong-bad %{lr-} bad.strong %{l1r-} strong makro-dizgesi yorumu -------------------------------------------------------------------- %{ir}.%{v}._spf.%{d2} 3.2.0.192.in-addr._spf.example.com %{lr-}.lp._spf.%{d2} bad.strong.lp._spf.example.com %{lr-}.lp.%{ir}.%{v}._spf.%{d2} bad.strong.lp.3.2.0.192.in-addr._spf.example.com %{ir}.%{v}.%{l1r-}.lp._spf.%{d2} 3.2.0.192.in-addr.strong.lp._spf.example.com %{d2}.trusted-domains.example.net example.com.trusted-domains.example.net IPv6: %{ir}.%{v}._spf.%{d2} 1.0.B.C.0.0.0.0. 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.B.D.0.1.0.0.2.ip6._spf.example.com