E-posta & SMTP Sunucu

    Sieve Filtreleri ile Otomatik Mail Kuralları

    Dovecot üzerinde Sieve filtreleri yazarak gelen mailleri sunucu tarafında otomatik yönetme.

    11 dk okuma Güncellendi: 25 Ağustos 2026

    Gelen kutun günde iki yüz mail alıyorsa ve bunların yarısı otomatik bildirim, izleme uyarısı ya da fatura ise, bu mailleri ayıklamak için Outlook'un ya da telefonun kurallarına güvenmek işe yaramaz. Sebebi basit: istemci tarafındaki kurallar yalnızca o istemci açıkken çalışır. Telefonundan baktığında hâlâ karmakarışık bir gelen kutusu görürsün. Sieve filtreleri bu sorunu kökünden çözer, çünkü kural sunucu tarafında, mail daha posta kutusuna yazılırken uygulanır. Hangi cihazdan bakarsan bak, mailler zaten doğru klasörde durur.

    Bu rehberde Sieve'in nasıl çalıştığını, Dovecot üzerinde nasıl etkinleştirileceğini, temel sözdizimini ve günlük hayatta gerçekten işe yarayan kural örneklerini anlatacağım. Otomatik yanıt (vacation), bayrak atama, adres testleri ve kullanıcıların kendi kurallarını yazabilmesi için ManageSieve kurulumuna da gireceğim. Sonunda kural yazarken en sık düşülen tuzakları ve bir kuralın neden çalışmadığını nasıl anlayacağını göstereceğim.

    Sieve Nedir, Zincirin Neresinde Çalışır#

    Sieve, e-posta filtreleme için tasarlanmış küçük ve kasıtlı olarak sınırlı bir dildir. Döngüsü yoktur, dosya okuyup yazamaz, dış komut çalıştıramaz. Bu kısıtlar bilinçlidir: kullanıcıların yazdığı kurallar sunucuda çalışacağı için, dilin sonsuz döngüye girmesi ya da sistemi tehlikeye atması mümkün olmamalıdır. Yapabildiği tek şey, gelen mesaja bakıp onu bir klasöre koymak, bayrak atamak, yönlendirmek, reddetmek ya da silmektir.

    Sieve'in çalıştığı an kritiktir. Postfix mesajı kabul eder ve teslimat ajanına (Dovecot LDA ya da LMTP) devreder; işte Sieve tam bu noktada, mesaj posta kutusuna yazılmadan hemen önce devreye girer. Bu yüzden Sieve kuralı IMAP istemcisinden bağımsızdır ve mail sunucuya ulaştığı anda uygulanır.

    [Gönderen] --> [Postfix / MTA] --> [Dovecot LMTP] --> [SIEVE] --> [Klasör]
                                                            ^
                                              kural burada çalışır
    

    Sieve ile istemci tarafındaki kuralları karıştırma. Webmail veya masaüstü istemcisinde tanımladığın filtre, o program çalışırken uygulanır ve sadece o cihazı ilgilendirir. cPanel gibi panellerde gördüğün "E-posta Filtreleri" arayüzü de aslında sunucu tarafında çalışır ama farklı bir motor kullanabilir; cPanel tarafındaki karşılığı için cPanel e-posta filtreleri yazısına bakabilirsin.

    ÖzellikSieve (sunucu)İstemci kuralları
    Ne zaman çalışırMail teslim edilirkenİstemci açıkken
    Hangi cihazı etkilerHepsiSadece o cihaz
    Otomatik yanıtVar (vacation)Sınırlı
    Sunucu erişimi gerekir miEvet (ya da ManageSieve)Hayır
    Klasör oluşturabilir miEvet (:create)Genelde hayır

    Dovecot Üzerinde Sieve'i Etkinleştirme#

    Debian/Ubuntu tarafında Sieve, Dovecot'un ayrı bir paketiyle gelir. Kurulum ve temel yapılandırma şöyledir:

    # Sieve ve ManageSieve desteğini kur
    apt install dovecot-sieve dovecot-managesieved
    
    # Yapılandırma dosyalarını düzenleyeceğiz
    # /etc/dovecot/conf.d/15-lda.conf
    # /etc/dovecot/conf.d/20-lmtp.conf
    # /etc/dovecot/conf.d/90-sieve.conf
    

    Sieve eklentisini teslimat yollarının ikisinde de etkinleştirmen gerekir. Postfix mesajı LMTP üzerinden veriyorsa 20-lmtp.conf, LDA üzerinden veriyorsa 15-lda.conf dosyasını düzenle; ikisini birden yazmak zararsızdır:

    # /etc/dovecot/conf.d/20-lmtp.conf
    protocol lmtp {
      mail_plugins = $mail_plugins sieve
    }
    
    # /etc/dovecot/conf.d/15-lda.conf
    protocol lda {
      mail_plugins = $mail_plugins sieve
    }
    

    Asıl Sieve ayarları 90-sieve.conf içindedir. Buradaki iki kavramı ayırt etmek önemlidir: kullanıcı betiği her hesabın kendi kurallarıdır, öncesi/sonrası betikleri ise yönetici tarafından tanımlanan ve tüm kullanıcılar için çalışan kurallardır.

    # /etc/dovecot/conf.d/90-sieve.conf
    plugin {
      # Kullanıcının etkin betiği ve betik dizini
      sieve = file:~/sieve;active=~/.dovecot.sieve
    
      # Yönetici kuralları: kullanıcı betiğinden ÖNCE çalışır
      sieve_before = /etc/dovecot/sieve/global-before.sieve
    
      # Yönetici kuralları: kullanıcı betiğinden SONRA çalışır
      sieve_after = /etc/dovecot/sieve/global-after.sieve
    
      # Betik boyutu ve sayı sınırları
      sieve_max_script_size = 1M
      sieve_quota_max_scripts = 20
    }
    

    sieve_before yönetici olarak zorunlu kılmak istediğin kurallar için (örneğin spam etiketli mailleri Junk'a taşımak), sieve_after ise kullanıcının kuralları hiçbir şey yapmadıysa devreye girecek varsayılanlar için kullanılır. Değişikliklerden sonra systemctl restart dovecot çalıştır.

    Temel Sözdizimi: require, if, fileinto, stop#

    Her Sieve betiği kullandığı eklentileri en üstte bildirmek zorundadır. require satırını yazmayı unutursan betik derlenmez ve tüm kuralların çalışmaz — bu, yeni başlayanların bir numaralı hatasıdır.

    # Kullanılacak eklentiler EN ÜSTTE bildirilir
    require ["fileinto", "mailbox", "imap4flags", "envelope"];
    
    # Konu satırında [FATURA] geçenleri Faturalar klasörüne koy
    if header :contains "Subject" "[FATURA]" {
        fileinto :create "Faturalar";
        stop;
    }
    
    # Belirli bir göndericiden gelenleri işaretle ve klasörle
    if address :is "From" "[email protected]" {
        setflag "\\Seen";
        fileinto :create "Sistem/Izleme";
        stop;
    }
    
    # Hiçbir kural eşleşmezse mesaj INBOX'a düşer (varsayılan davranış)
    

    Dört temel kavramı bilirsen Sieve'in yüzde doksanını yazabilirsin:

    1. Test: header, address, envelope, size, exists, body (ek eklenti gerektirir).
    2. Karşılaştırıcı: :is (birebir eşit), :contains (içeriyor), :matches (joker * ve ? ile).
    3. Eylem: fileinto (klasöre koy), keep (INBOX'ta bırak), discard (sessizce sil), reject (reddet), redirect (yönlendir), setflag/addflag (bayrak).
    4. Akış: stop (betiği bitir), if/elsif/else.

    stop komutunun önemi büyüktür. Sieve varsayılan olarak bir kural eşleştikten sonra da sonraki kuralları değerlendirmeye devam eder; stop yazmazsan mesaj birden fazla klasöre kopyalanabilir ya da beklenmedik bir eyleme takılabilir. Kural bloklarının sonuna stop koymayı alışkanlık hâline getir.

    fileinto :create ifadesindeki :create argümanı, klasör yoksa otomatik oluşturur ve bunun için mailbox eklentisinin require satırında bulunması gerekir. Alt klasör oluştururken ayırıcı Dovecot'un separator ayarına bağlıdır; Maildir kurulumlarında genellikle nokta (Sistem.Izleme) ya da bölü (Sistem/Izleme) kullanılır. Yanlış ayırıcı, klasör adının tek parça olarak görünmesine yol açar.

    Günlük Hayatta İşe Yarayan Kural Örnekleri#

    Aşağıdaki betik, gerçek bir sistem yöneticisinin gelen kutusunda çalışabilecek bütünlüklü bir örnek. Sırayı kasıtlı kurdum: önce en özel kurallar, sonra genel olanlar.

    require ["fileinto", "mailbox", "imap4flags", "envelope", "regex", "variables"];
    
    # 1) Spam olarak etiketlenmiş mailleri Junk'a taşı
    if anyof (
        header :contains "X-Spam-Flag" "YES",
        header :contains "X-Spam-Status" "Yes"
    ) {
        fileinto :create "Junk";
        stop;
    }
    
    # 2) İzleme sisteminden gelen KRİTİK uyarıları okunmamış bırak ve öne çıkar
    if allof (
        address :domain :is "From" "izleme.firmaniz.com",
        header :contains "Subject" "CRITICAL"
    ) {
        addflag "\\Flagged";
        fileinto :create "Uyarilar/Kritik";
        stop;
    }
    
    # 3) Aynı sistemin bilgi amaçlı mesajlarını okunmuş say
    if address :domain :is "From" "izleme.firmaniz.com" {
        setflag "\\Seen";
        fileinto :create "Uyarilar/Bilgi";
        stop;
    }
    
    # 4) Fatura ve muhasebe yazışmaları
    if anyof (
        header :contains "Subject" ["fatura", "e-arşiv", "makbuz"],
        address :is "From" "[email protected]"
    ) {
        fileinto :create "Muhasebe";
        stop;
    }
    
    # 5) Kendi alan adına gelen bülten/pazarlama maillerini ayır
    if header :contains "List-Unsubscribe" "" {
        fileinto :create "Bultenler";
        stop;
    }
    
    # 6) 20 MB üzeri ekli mailleri ayrı klasöre al (disk takibi için)
    if size :over 20M {
        fileinto :create "Buyuk";
        stop;
    }
    

    Bu betikte dikkat edilmesi gereken birkaç ayrıntı var. anyof mantıksal VEYA, allof mantıksal VE anlamına gelir. address :domain :is yalnızca alan adı kısmına bakar, yani [email protected] ile [email protected] aynı kurala düşer. Beşinci kuraldaki List-Unsubscribe testi, başlığın varlığını kontrol etmenin pratik bir yoludur; daha temiz yazımı if exists "List-Unsubscribe" şeklindedir.

    Yönlendirme ve reddetme de sık kullanılır ama dikkat ister:

    require ["copy", "reject", "envelope"];
    
    # Bir kopyasını yönlendir, aslını da sakla (:copy olmadan mesaj INBOX'ta kalmaz)
    if header :contains "Subject" "[DESTEK]" {
        redirect :copy "[email protected]";
    }
    
    # Belirli bir gönderene kibarca ret dön
    if address :is "From" "[email protected]" {
        reject "Bu adres artık kullanılmamaktadır, lutfen [email protected] adresine yazin.";
        stop;
    }
    

    redirect komutunu :copy olmadan kullanırsan mesaj yönlendirilir ve senin kutunda kalmaz. Bir de yönlendirmenin SPF/DKIM açısından riskli olduğunu unutma: mesajı başka bir alan adına ilettiğinde SPF kontrolü senin sunucunda kırılabilir. Kendi alan adın dışına toplu yönlendirme yapıyorsan bunun teslimat etkisini hesaba kat.

    Otomatik Yanıt (Vacation) ve ManageSieve#

    Tatil/ofis dışı mesajı Sieve'in vacation eklentisiyle kurulur ve klasik "otomatik yanıt" tuzaklarına karşı korumalıdır: aynı göndericiye belirli bir süre içinde yalnızca bir kez cevap döner.

    require ["vacation", "envelope"];
    
    # Otomatik yanıt döngüsüne girmemek için gönderen adresleri sınırlandır
    if not header :contains "Auto-Submitted" "auto-generated" {
        vacation
            :days 3
            :subject "Ofis disindayim"
            :addresses ["[email protected]", "[email protected]"]
            "Merhaba,
    
    25 Agustos - 5 Eylul tarihleri arasinda ofis disindayim.
    Acil konular icin [email protected] adresine yazabilirsiniz.
    
    Iyi calismalar.";
    }
    

    :days 3 aynı göndericiye üç gün içinde tekrar cevap dönülmemesini sağlar; bu, iki otomatik yanıt sisteminin birbirine sonsuz mail atmasını engelleyen kritik korumadır. :addresses ise hangi kendi adreslerine gelen mesajlarda cevap döneceğini belirtir; yazmazsan takma adlarına gelen mailler için yanıt üretilmeyebilir. Baştaki Auto-Submitted kontrolü de otomatik üretilen bildirimlere cevap yazılmasını önler.

    Kullanıcıların kendi kurallarını webmail üzerinden yazabilmesi için ManageSieve protokolünü açman gerekir. Bu protokol 4190 portunda çalışır:

    # /etc/dovecot/dovecot.conf
    protocols = imap lmtp sieve
    
    # /etc/dovecot/conf.d/20-managesieve.conf
    service managesieve-login {
      inet_listener sieve {
        port = 4190
      }
    }
    protocol sieve {
      managesieve_max_line_length = 65536
      managesieve_implementation_string = Dovecot
    }
    
    # Servisi yeniden başlat ve portu doğrula
    systemctl restart dovecot
    ss -tlnp | grep 4190
    
    # Portun dışarıdan erişilebilir olması gerekiyorsa güvenlik duvarında aç
    ufw allow 4190/tcp
    

    Roundcube gibi webmail arayüzlerinin managesieve eklentisi bu porta bağlanarak kullanıcıya görsel bir kural editörü sunar. ManageSieve'i internete açacaksan TLS'i mutlaka zorunlu kıl; sertifika kurulumu için Postfix'e Let's Encrypt TLS sertifikası kurma yazısındaki adımlar Dovecot tarafı için de aynı sertifikayı kullanır.

    Hata Ayıklama ve Sık Yapılan Hatalar#

    Bir kural çalışmıyorsa önce betiğin derlenip derlenmediğine bak. Sieve betikleri derlenir ve derlenmemiş bir betik hiç çalışmaz — kısmen çalışmaz, tamamen devre dışı kalır:

    # Betiği derle; hata varsa satır numarasıyla söyler
    sievec ~/.dovecot.sieve
    
    # Gerçek bir mesajla kuralları test et (posta kutusuna yazmadan)
    sieve-test -D ~/.dovecot.sieve ornek-mesaj.eml
    
    # Dovecot loglarında Sieve satırlarını izle
    tail -f /var/log/mail.log | grep -i sieve
    

    sieve-test özellikle değerlidir: hangi kuralın eşleştiğini ve hangi eyleme karar verildiğini adım adım gösterir, ama mesajı gerçekten teslim etmez. Test için bir örnek .eml dosyasını webmail'den ya da IMAP istemcisinden dışa aktarabilirsin.

    Şimdi en sık gördüğüm hatalar. Birincisi, require satırını eksik bırakmak. fileinto kullanıp require ["fileinto"] yazmazsan betik derlenmez ve tüm kuralların sessizce devre dışı kalır. Kullandığın her eklentiyi listele. İkincisi, stop yazmamak; kurallar üst üste çalışır ve mesaj beklemediğin bir klasöre gider. Üçüncüsü, kural sırasını yanlış kurmak — genel bir kural (örneğin "alan adı firmaniz.com ise") en üstte durursa, altındaki daha özel kurallara hiç sıra gelmez. Her zaman en özelden en genele doğru yaz. Dördüncüsü, klasör ayırıcısını yanlış kullanmak; Sistem/Izleme yerine Sistem.Izleme beklenen bir kurulumda tek isimli garip bir klasör oluşur. Dovecot'un separator ayarını kontrol et. Beşincisi, discard komutunu test etmeden canlıya almak; sessizce silinen mailin geri dönüşü yoktur, önce fileinto "Cop" ile bir süre gözlemle. Altıncısı, betiği düzenleyip Dovecot'u yeniden başlatmayı beklemek — kullanıcı betikleri her teslimde okunur, yeniden başlatmaya gerek yoktur; ama sieve_before/sieve_after gibi yapılandırma değişiklikleri için gerekir.

    Son bir uyarı: Sieve kuralları posta kutusuna yazma anında çalıştığı için, kota dolduğunda fileinto başarısız olabilir ve mesaj reddedilir. Kotayla Sieve'in nasıl etkileştiğini Dovecot kota yönetimi yazısında ayrıca ele aldım.

    Sıkça Sorulan Sorular#

    Sieve filtreleri hangi maillere uygulanır#

    Sieve yalnızca sunucuya yeni teslim edilen mesajlara uygulanır. Posta kutunda hâlihazırda duran eski mailler etkilenmez; bir kural yazdığında geçmişe dönük bir düzenleme yapmaz. Eski mailleri toplu taşımak istiyorsan bunu IMAP istemcisinden ya da sunucu tarafında doveadm move gibi araçlarla ayrıca yapman gerekir.

    Sieve kuralım neden çalışmıyor#

    En yaygın üç sebep şudur: require satırında kullandığın eklentiyi bildirmemişsindir ve betik derlenmemiştir; kural sırası yanlıştır ve daha genel bir kural üstte eşleşip stop ile akışı kesmiştir; ya da klasör adındaki ayırıcı sunucunun beklediğinden farklıdır. Önce sievec ile derle, sonra sieve-test ile gerçek bir mesaj üzerinde adım adım izle.

    Sieve ile mail silebilir miyim#

    Evet, discard komutu mesajı hiçbir iz bırakmadan siler ve gönderene bildirim gitmez. Ancak bu komutu doğrudan canlıya almak risklidir, çünkü yanlış eşleşen bir kural sessizce mail kaybettirir. Güvenli yöntem, önce fileinto :create "Cop" ile ayrı bir klasöre almak, bir hafta gözlemleyip yanlış eşleşme olmadığını doğrulamak, sonra discard komutuna geçmektir.

    Kullanıcılar kendi Sieve kurallarını yazabilir mi#

    Evet, bunun için ManageSieve protokolünü (4190 portu) etkinleştirmen yeterlidir. Roundcube gibi webmail arayüzlerinin managesieve eklentisi bu porta bağlanır ve kullanıcıya görsel bir kural editörü sunar; kullanıcı sunucuya SSH ile girmek zorunda kalmaz. Portu internete açacaksan TLS'i zorunlu kılmayı ve güvenlik duvarında kısıtlamayı ihmal etme.

    Sieve ile otomatik yanıt nasıl kurulur#

    vacation eklentisini require satırına ekleyip :days ve :subject argümanlarıyla bir mesaj tanımlarsın. :days değeri aynı göndericiye kaç günde bir cevap döneceğini belirler ve otomatik yanıt döngülerini önlemek için kritiktir. Ayrıca :addresses ile hangi kendi adreslerine gelen maillerde yanıt üretileceğini belirtmeli, otomatik üretilmiş mesajlara cevap dönmemek için Auto-Submitted başlığını kontrol etmelisin.

    Sieve yerine ne kullanmalıyım#

    Sunucu tarafında filtreleme istiyorsan ve Dovecot kullanıyorsan Sieve zaten standart ve en doğru araçtır; alternatif aramaya gerek yoktur. Paylaşımlı hosting kullanıyor ve sunucuya erişemiyorsan, panelin kendi filtre arayüzü (cPanel'de E-posta Filtreleri) benzer işi yapar. Yalnızca tek bir cihazda geçerli kurallar yetiyorsa istemci tarafındaki filtreler daha basit bir çözümdür.

    Kapanış#

    Sieve, gelen kutusu düzenini istemciden bağımsız hâle getiren en pratik araçtır ve öğrenme maliyeti gerçekten düşüktür: dört komut ve iki karşılaştırıcı bilirsen günlük ihtiyacın çoğunu karşılarsın. Aklında tutman gereken dört alışkanlık şunlar: kullandığın her eklentiyi require satırına yaz, kuralları en özelden en genele doğru sırala, her blok sonuna stop koy ve discard gibi geri dönüşü olmayan komutları önce bir klasöre yazarak test et. Betiği canlıya almadan önce sievec ile derlemek, sessizce devre dışı kalmış bir betikle uğraşmaktan seni kurtarır.

    Kendi Dovecot sunucunu kurup Sieve'i uçtan uca yapılandırmak istiyorsan tam root erişimli VDS ve sanal sunucu paketlerimiz uygun bir zemin sunar. Postfix, Dovecot ve DKIM'i kurulu hâlde teslim alıp doğrudan kural yazmaya başlamak istersen SMTP sunucu paketimiz bu adımları atlar; yapılandırma ve bakımı tamamen devretmek istersen sunucu yönetimi hizmetimiz devreye girer. Sunucu yönetmeden kurumsal posta kutusu arıyorsan e-posta çözümlerimize göz atabilirsin.

    SieveDovecotFiltreleme

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.