Kurulum
Ýlk adÝm procmail'in enson sürümünün
elde edilmesidir. Bu yazýnýn yazýmýna baþlandýðýnda
son sürüm 3.11pre7 idi.
Program için kaynak yazýlýmýn elde edilmesinden sonra,
kurulum için, onun gevþetilmesi ve çýkýndan çýkarýlmasý
gerekecektir. Bu amaç için verilecek güdüm
tar -xzvf procmail.tar.gz olmalýdýr
Bunu izleyen aþama Makefile ve config.h
dosyalarýnýn eldengeçirilmesidir. Bu yazýnýn yalnýzca bir
giriþ olmasýndan dolayý ve bu ilk giriþte nesneleri basit
tutmak amacýyla, bu dosyalarýn biçimlendirme seçeneklerini
açýklamayacaðýz. Ýlgilenen okuyucu elyordam sayfalarýna ve
kaynaklarla birlikte sunulan kaynaklandýrmalara
baþvurabilir.
Yine de hiç olmazsa Makefile dosyasýnda
BASENAME seçeneðinin varlýðýndan sözetmek yerinde
olacaktýr. Bu seçenekle procmail'in kurulacaðý taban dizini
gösterebiliriz. Taban dizin adýndan, gösterdiðimiz dizin
bin ve man gibi dizinleri askýya
alacaktýr.
Sonunda, çýkýný derlemek için make install
güdümünün verilmesi gerekir.
Procmail tüm sistem için yüklenip sendmail(8)'in
bazý kurallarýyla çaðrýlabileceði gibi bazý kullanýcýlarýn
kendi kullanýmlarý için de devreye sokulabilirler.
Ýkinci durumda kullanýcý procmail kullanýmýný kendisinin
.forward dosyasýnda, aþaðýdaki biçimde bir satýrla
belirtilecektir:
|IFS=' ' && exec /home/juan/procmail/bin/procmail -f- ||
exit 75 #juan
Bu satýrda juan adlý kullanýcýnýn procmail'i kendi
HOME çevresel deðiþkeniyle belirtilen dizinine kurduðunu
varsaymaktayým. Bu özel satýr için, derleme sýrasýnda
belirtilecek olan BASENAME,
/home/juan/procmail'dýr.
Temel Fonksiyonlar
Procmail standart giriþ veriyolundan bilgi okur.
O, kullanýcýnýn kendi HOME adresinde bulunmasý gereken
ve bir biçimlendirme dosyasý olan .procmailrc
adlý dosyaya bakar. Bu dosya, procmail'e bir mesajýn
okunmasýndan sonra ne yapacaðýný söyleyen bazý kurallar
tanýmlar. O, mesajýn saklanmasý, gözardý edilmesi,
kendiliðinden yanýtlanmasý, vs.. gibi konularda karar
verebilmek için mesaj baçlýðýnda bazý katarlarý kontrol
etmek üzere yönlendirilebilir.
Procmail, gelen ya da bir dosyada depolanan posta ile
otomatik olarak ilgilenmemize izin verir.
Biçimlendirme
Kullanýlan biçimlendirme dosyasý .procmailrc olup
HOME içine yerleþtirilmeldir.
# ile baþlayan her satýr bilgilendirme amaçlý
olup eylem gerçekleþtirme niteliði yoktur.
:0 veya :0: ile baþlayan satýrlar,
procmail'e bir mesajla ne yapacaðýný söyleyen yeni bir
kuralýn baþlangýcýný gösterirler.
* ile baþlayan satýrlar bir kuralýn uygulanmasý
için saðlanmasý gereken bir koþulu gösterirler. Bu,
procmail'in hangi mesajlarýn kurala göre iþlenmesi
gerektiðini saptamak için kullandýðý düzenektir.
Geriye kalan, yani, :, veya * ile
baþlamayanlar güdüm olarak nitelendirilirler. Diðer bir
deyiþle, koþulu saðlayan mesaja procmail tarafýndan
uygulanacak eylemi nitelendirirler. Bazý olasý eylem
ya da güdümler arasýnda, bir mesajýn silinmesi, mesaj
yünlendirimi, mesajýn saklanmasýndan sözedilebilir.
Bir .procmailrc dosyasýnda gösterilmesi gereken
ilk þeyler çevresel deðiþkenlerdir. Size ait .procmailrc
dosyasýnda tanýmlamanýzý salýk verebileceðim deðiþkenlerden
bazýlarý aþaðýda sunulmaktadýr.
MAILDIR
Procmail'in posta mesajlý dosyalarý saklayacaðý dizini
gösterir. Bu deðiþken genellikle $HOME/mail ya da $HOME/Mail'e
yönlendirme yapar. Bunlardan hangisinin geçerli olacaðý
kullanýlan posta okuyucusuna baðlýdýr.
LOGFILE
Procmail'in, gerçekleþtirilen haberleþmelerin tümüyle ilgili
kayýtlarýn tutulduðu kayýt dosyasýnýn adýný belirtir.
SENDMAIL
Otomatik olarak mesaj yanýtlamada kullanýlacak olan sendmail'in
nerede bulunacaðýný belirtir.
FORMAIL
formail'in nerede bulunacaðýný gösterir. Bu program, procmail
ile birlikte daðýtýlýr ve amacý posta baþlýklarýný yeniden
düzenlemek ya da bir mesajý günderim veya depolama üncesinde
yeniden biçimlendirmektir.
DEFAULT
Tanýmlanan kurallardan herhangi birinin procmail tarafýndan
uygulanamamasý durumunda bir mesajýn saklandýðý
dosyadýr.
Çevresel deðiþkenler, .procmailrc içinde herhangi bir
yerde tanýmlanabilirler. Eðer bir deðiþken = simgesini
izleyen bir deðerle birlikte gözükmüyorsa, devre düþü
býrakýlýr.
Kurallar iki grupta toplanabilirler: Eylemlerinin uygulanmasý
sonrasýnda mesaj gönderimine yolaçanlar ve yolaçmayanlar.
Ýlk gruptaki kurallar basittir. Onlarýn eylemlerinin
gerçekleþtirilmesi sonrasýnda bu mesaja baþka bir kuralýn
uygulanmayacaðý varsayýlýr ve böylece mesaj günderilir.
Mesajýn gönderilmediðini varsayan ikinci grup kurallarýn
kullanýlmalarý çok yararlýdýr. Bu durum, mesaja gönderim
üncesinde, özelikle çok sayýda kuralýn uygulanmasý ya da
eylemin gerçekleþtirilmesi istendiðinde ünem kazanýr.
Bir kural yazýmý için genel yapý aþaðýdaki gibidir:
:0 [options] [ : [exclusion file] ]
* condition 1
* condition 2
.
.
.
* condition N
command
Þimdi bu yapýyý parça parça çözümleyelim. Her kural
:0 ile baþlamalýdýr. Kuralý aþaðýdaki seçeneklerden
herhangi biri izleyebilir:
H Koþul posta baþlýðýna uygulanýr.
B Koþul mesaj gövdesi içinde aranýr.
D Koþul soruþturulduðunda küçük ve büyük harfler
ayýrdedilebilir olarak nitelenecektir.
A Bu kural, bir önceki uygulandýðýnda uygulanacaktýr.
a A'ya benzer, ama bir önceki kural yanýlgýsýz
uygulanmýþ olmalýdýr.
E Bu kural, bir önceki kural uygulanmadýðýnda
çalýþtýrýlacaktýr.
e Bu kural, bir önceki kuralýn çalýþtýrýlmýþ olduðu ama
bir yanýlgý belirterek devre dýþý kaldýðý durumlarda
çalýþtýrýlacaktýr.
h Mesaj baþlýðý güdüme aktarýlýr.
b Mesaj gövdesi güdüme aktarýlýr.
f Güdüm bir süzgeç olarak yorumlanýr.
c Mesajýn bir karbon kopyasýný, cc,
oluþturur. Mesajý gönderimiyle ilgili bir kuralýn bu seçenekle
çalýþtýrýlmasý durumunda gönderimle ilgili bir iþlev yerine
getirilir daha sonra diðer kurallar mesajýn karbon kopyasýna
uygulanabilir.
w Güdümün çalýþmasýný, güdüm çüküþ düzgüsünü alana
dek bekler.
W Önceki seçenek gibidir ama yanýlgý durumunda herhangi bir
ileti yayýnlamaz.
i Olasý yazým yanlýþlarýný gözardý eder.
r Ýletiyi olduðu gibi yazar. Onun sonunun boþ bir satûrla
bitip bitmediðini sýnamaz.
Eðer herhangi bir seçenek verilmeyecek olursa, benimsenen
eðilim, koþulun posta baþlýðý üzerinde sýnanmasýdýr (seçenek
H ). Güdüm, standart giriþ veriyolundan, iletinin hem
baþlýðýný hem de gödesini alýr (seçenek h ve b ). Bu durumda
büyük ve küçük harf ayýrýmý yoktur.
:0'den ve olasý seçeneklerden sonra, ikinci bir
: gelebilir. Bu durumda iletinin yazýlacaðý dosyanýn
iki süreç tarafýndan ayný anda dosyaya yazýmý engellemek
amacýyla dosya kilitlenmelidir. Kilit olarak kullanýlacak
dosya, istenirse, kullanýcý tarafýndan belirlenebilir.
Daha sonra koþullar, her satýra bir tane olacak ve koþul
öncesinde * karakteri kullanýlacak biçimde verilir.
Bir iletinin baþlýk ya da gövdesinde bi katarý bulabilmek
için koþullar genellikle düzgün deyimler olarak
yazýlýrlar. Düzgün deyimler diðerlerinin arasýnda aþaðýdaki
simgeleri kullanýrlar:
^ Satýrbaþý.
$ Satýrsonu.
. Satýrbaþýnadönüþ dýþýnda herhangi bir simge
* Sýfýr ya da daha çok kez.
+ Bir ya da daha çok kez.
? Sýfýr ya da daha çok kez.
[a-z] Simge bölgesi, bu örnekte a dan z ye.
[^a-z]a dan z ye bölgesi dýþýnda herhangi bir simge.
a|b 'a' ya da 'b'
Koþullardan sonra tek bir güdüm gelir. Eðer güdümün ilk
simgesi aþaðýdakilerden birisiyse o zaman özel bir davranýþ
sergilenir:
! Ýleti belirtilen posta adreslerinin tümüne birer birer
yönlendirilir.
| Eðer bu simge bir çalýþtýrýlabilen tarafýndan izlenirse,
koþulun saðlanmasý durumunda bu çalýþtýrýlabilen koþulur.
Simgeyi hiçbir þeyin izlememesi durumunda iletinin tam metni
standart çýkýþ veriyoluna gönderilir. Simgeyi bir deðiþken adý
izleyecek olursa o zaman da belirtilen güdümün sonucu bu
deðiþkende saklanýr.
Postalama Dizelgeleri
Procmail'in çok yararlý olabildiði yerlerden biri de
postamýzýn iþletimidir. Üç farklý Linux postalama dizelgesinin
sürdürümcüsü olduðumuzu varsayalým. Her bir dizelge orijinin
adresiyle kimliklendirilir. Sözgelimi, aþaðýdaki adreslere
sahip olduðumuzu varsayalým
l-linux@calvo.teleco.ulpgc.es
linux@nuclecu.unam.mx
linux-security@redhat.com
Olaðan durumlarda bu postalama dizelgelerinden gelen iletiler
ayný posta kutusuna birlikte ulaþýrlar ve birþey yapýlmayacak
olursa karmaþýk bir halde alýkonulurlar. Dolayýsýyla, postalarýn
geldikçe sýnýflanmasý ve uygun dosyalarda saklanmasý iþleri
kolaylaþtýracaktýr.
Procmail bu sorunu kolaylýkla çözebilir. Bu amaçla,
.procmailrc adlý dosyayý, aþaðýdaki basit kurallarla,
kullanarak bir Linux postalama dizelgesinden gelen postalarýmýzý
sýnýflandýrabiliriz:
:0
* ^From.*l-linux@calvo.teleco.ulpgc.es
l-linux
:0
* ^From.*linux@nuclecu.unam.mx
linux-mx
:0
* ^From.*linux-security@redhat.com
linux-security
Kurallardan birini dikkatlice inceleyelim. Eðer bir
kuralýn iç çalýþmasýný anlayabilirsek gerisini anlamak
daha kolay hale gelir. Çünkü, temel düzenek daima
aynýdýr.
Ýlk önce yeni bir kuralýn baþladýðýný belirten :0
katarý aranýp bulunur. Baþka seçenek bulunmadýðýndan procmail
bu kural için benimsenmiþ seçeneklerini alacaktýr: büyük ve
küçük harfler ayýrdedilebilir olacak, koþul yalnýzca posta
baþlýðýna uygulanacak, güdüm hem baþlýk hem de iletinin
gövdesini alacaktýr.
Ýzleyen satýrda koþul aranýp bulunur. Önceden sözedildiði
gibi bu daima gerçekleþtirilebilir, çünkü ilk simgesi
* dir. Koþul ise aþaðýdaki düzgün ifadedir:
^From.*linux@nuclecu.unam.mx
^From altkatarý procmail'e From altkatarýyla
baþlayan satýrlarýn saptanmasý gerektiðini söyler.
Daha sonra gelen .* karakteri, herhangi bir sayýda
karakter anlamýna gelir. Daha önceden gördüðümüz üzere, bir
düzenli ifadedeki "." simgesi herhangi bir karaktere
eþdeðer olup * sýfýr ya da daha çok anlamýna gelir.
Dolayýsýyla, .*, From den sonra sýfýr ya da
daha çok karakter bulunabilir.
Bundan sonra da, mesajýn geldiði yerin adresi olan
linux@nuclecu.unam.mx gelir.
Düzenli ifadeler hakkýnda bir parça daha düþünerek,
aþaðýdaki satýrlar bu kuralla tanýnacaktýr.:
From: linux@nuclecu.unam.mx
From:linux@nuclecu.unam.mx
FROM linux@nuclecu.unam.mx
Bu kuralla bu adresten ve baþka yerlerden gelen mesajlar
ayýrdedilebilir. Bu durumda elde olan mesajla ne
yapacaðýz?.
Ýzleyen satýr güdüm(ya da eylem) olup mesajla ne yapýlacaðýný
gösterir. Bu durumda, mesaj, saklanacaðý yer olan
linux-mx adlý dosyaya gönderilir. Dosyanýn açýk
eriþimyolunun belirtilmediði durumlarda, $MAILDIR
çevresel deðiþkeninin belirttiði eriþimyolu kullanýlýr.
Farklý dizelgelerden ulaþan iletiler, kökenlerine göre
(alandan), çeþitli dosyalara daðýtýlýrlar.
Özdevimli Yanýtlama
Procmail'in yararlý olabileceði diðer bir durum da
özdevimli (kendiliðinden) yanýtlamadýr. Sözgelimi, toplumsal OEG
anahtarýnýzý, e-posta ile istemiþ bulunan herkese
göndermek istemeniz durumunda, procmail'in ne kadar
etkin olduðu ortaya çýkacaktýr.
Bu amaçla, OEG toplumsal anahtarýmýz için bir dilekçe gibi
düþünülebilecek ve konusu içinde *PGP katarý bulunan bir kural
gündeme getirilebilir. Böyle bir kural aþaðýdaki biçimde
yazýlabilir:
0:
* ^Subject.*PGP
| (formail -r ; cat $HOME/key.asc) | sendmail -t
Ayný düþünce, tatile gittiðimizi ve onlardan gelebilecek
e-posta iletilerini tatil dönüþü yanýtlayacaðýmýzý ileti
sahiplerine bildirmeye yönelik bir program yazmamýz durumuna da
uygulanabilir:
0:
| (formail -r; cat $HOME/vacations.txt) | sendmail -t
Son durumda, tým iletilerin ayný not içererek
gönderilmesinden dolayý bir koþul bulunmamaktadýr.
Özdevimli Yanýtlamalarda Sonsuz Döngülerden Kaçýnma
Önceki örneklerde postanýn özdevimli (kendiliðinden)
yanýtlanmasý durumunda ortaya çýkabilen sonsuz döngülerden
kaçýnmak için herhangi bir çaba gösterilmemiþtir.
Kökeni kendi E-posta adresimiz olan bir ileti durumunda
program o adrese yanýtlama yapacak ve yanýt bize dönecektir.
Bu ileti bir kez daha yanýtlanacak ve bu süreç bir sonsuz
döngüye dönüþecektir. Bu durumdan kaçýnmak için baþlýða
iletinin yanýtlanmýþ durumda bulunduðunu belirten bir satýr
daha eklenmelidir. Bu doðrultuda, formail'in -A
seçeneði kullanýlabilir:
formail -r -A"X-Loop: dir@email.es"
Bu durumda dir@email.es sizin kendi e-posta adresiniz
olacaktýr. Böylece, yanýtlama için baþlýk oluþturulurken,
ileride yeni nir kuralla sýnanabilmek için X-Loop
satýrý eklenir:
:0
* !^X-Loop: dir@email.es
| (formail -r -A"X-Loop: dir@email.es" ;
cat $HOME/vacation.txt) | sendmail -t
Bu kural sonsuz bir döngü oluþmasýný engelleyecektir.
Çünkü, baþlýkta X-Loop satýrý içeren bir ileti
koþulu saðlamayacak ve sonuçta procmail tarafýndan
yanýtlanmayacaktýr.
Dosyalarýn Çözümlenmesi
.procmailrc'miz için Bir diðer ilginç kural da
uuencode(1) ile gizyazýlanmýþ olan gelen iletinin
kendiliðinden çözümlenmesidir. Kural söyle verilebilir.:
:0 B
* ^begin 644 .*
{
MAILDIR=$HOME/files
:0
| uudecode
}
Burada B seçneðinin kullanýmýyla kuralýn
koþulunun yalnýzca ileti gövdesi üzerinde sýnanmasý
saðlanmýþ olmaktadýr.
Eðer kural "begin 644" katarýyla baþlayan bir satýr
bulursa, bunun anlamý uuencode(1) ile gizyazýlanmýþ
bir dosyanýn baþlangýcý bulunmuþ demektir.Bu durumda,
MAILDIR, çevresel deðiþkeninin devreye sokulmasý,
ya da diðer bir deyiþle bu deðiþken tarafýndan
gösterilen dizine geçilme sözkonusu olur. O andan baþlayarak,
tüm basým ya da gösterim eylemleri gösterilen taban dizini
alarak gerçekleþtirilecektir.Bizim durumumuzda alýnan
iletilerin $HOME/files dizininde saklanmasý
söz konusu olacaktýr..
Bunun ardýnda koþulsuz bir kural varolup iletiyi
çözümlemek amacýyla uudecode(1)'ye borular.
Özgün dosya $HOME/files dizinine gidecektir.
Sonuç
Bu kýsa giriþten sonra, procmail'in çok yetenekli olduðu
ve postanýzýn iþletimini kolay ve etkin olarak yapabilmenize
yardýmcý olacaðý açýk bir biçimde gözler önünen serilmiþ
bulunmaktadýr. Düzenli ifadeler ve kurallarla deneyler
yapmanýzý ve bunlarý gereksinimlerinize uyarlamanýzý
önermekteyim. B¢ylelikle, bu kýsa giriþ yazýsýnda
deðinemediðim ve daha ileri düzeylere giden procmail
olanaklarý çok daha ilginç olanaklar sunabilecektir.
|