| 
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 FonksiyonlarProcmail 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çimlendirmeKullanı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. MAILDIRProcmail'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.
 LOGFILEProcmail'in, gerçekleştirilen haberleşmelerin tümüyle ilgili
             kayıtların tutulduğu kayıt dosyasının adını belirtir.
 SENDMAILOtomatik olarak mesaj yanıtlamada kullanılacak olan sendmail'in
             nerede bulunacağını belirtir.
 FORMAILformail'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.
 DEFAULTTanı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 DizelgeleriProcmail'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ıtlamaProcmail'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. |