Kota kuralını yazıyorsunuz, Dovecot'u yeniden başlatıyorsunuz, hata almıyorsunuz — ve kutular sınırsız büyümeye devam ediyor. Sebep kuralın yanlış olması değil; dosyanın hiç okunmamasıdır.
Dovecot'un standart dağıtımı yapılandırmayı /etc/dovecot/conf.d/ altındaki parçalara böler ve ana dosyada !include conf.d/*.conf satırıyla bunları dahil eder. CyberPanel kendi dovecot.conf dosyasını yazarken bu include satırını koymaz. Dolayısıyla conf.d altına eklediğiniz her şey — kota dahil — diske yazılır ama hiçbir zaman okunmaz. Çözüm: kota yapılandırmasını doğrudan ana dovecot.conf içine koymak, ya da include satırını bilinçli olarak eklemek. Doğrulama tek komutla yapılır: doveconf -n etkin yapılandırmayı gösterir; kota satırları orada görünmüyorsa uygulanmıyordur.
Kurulum tamamdır: /etc/dovecot/conf.d/90-quota.conf içine kural yazılmış, servis yeniden başlatılmış, günlükte hata yok. Buna rağmen kutular tanımlı sınırın kat kat üstüne çıkıyor ve kullanıcı hiçbir uyarı almıyor.
Bu noktada çoğu kişi kuralın sözdizimini sorgular ve saatlerce farklı quota_rule yazımları dener. Oysa sorun kuralda değildir; dosya hiç okunmamaktadır.
Dovecot'un dağıtımlardan gelen standart kurulumu yapılandırmayı parçalara böler: 10-mail.conf, 10-auth.conf, 90-quota.conf gibi dosyalar /etc/dovecot/conf.d/ altında durur. Bunların devreye girmesini sağlayan tek şey ana dosyanın sonundaki satırdır:
!include conf.d/*.conf
CyberPanel mail yığınını kurarken /etc/dovecot/dovecot.conf dosyasını kendi şablonundan üretir. Bu şablon kendi kendine yeten, tek parça bir yapılandırmadır ve include satırını içermez. conf.d dizini diskte durur, içindeki dosyalar okunabilir görünür, ama Dovecot onlara hiç bakmaz.
Bu davranış sessizdir: olmayan bir dosyayı dahil etmeye çalışsanız hata alırsınız, ama var olan bir dosyayı dahil etmemek hata değildir. Bu yüzden günlükte hiçbir iz kalmaz.
Tahmin yürütmeden önce etkin yapılandırmayı okuyun. doveconf -n, Dovecot'un gerçekten kullandığı ayarları — varsayılanlardan arındırılmış hâlde — basar:
# Kota ile ilgili etkin ne varsa göster
doveconf -n | grep -i quota
# Ana dosya conf.d'yi dahil ediyor mu?
grep -n 'include' /etc/dovecot/dovecot.conf
Birinci komut boş dönüyorsa kota yapılandırması etkin değildir. İkinci komut conf.d içeren bir satır göstermiyorsa sebebini bulmuşsunuz demektir.
Bu iki komut, aynı sınıftaki bütün sorunlar için geçerli bir alışkanlıktır: dosyada ne yazdığına değil, sunucunun ne okuduğuna bakın.
İki yol var. Panelin ürettiği yapıyı bozmamak için tercih edilen yöntem, kota bloğunu doğrudan ana dosyanın sonuna yazmaktır:
# /etc/dovecot/dovecot.conf sonuna
mail_plugins = $mail_plugins quota
plugin {
quota = maildir:User quota
quota_rule = *:storage=2G
quota_rule2 = Trash:storage=+200M
quota_grace = 10%
}
quota_rule2 satırı, çöp kutusunu ana kotanın üzerine ek pay olarak tanımlar; bu olmadan kullanıcı kotasını doldurduğunda mesaj silerek yer açamaz — çünkü silinen mesaj çöpe gider ve kota düşmez.
Diğer yol include satırını eklemektir. Bu, Dovecot'u standart davranışına döndürür ama panelin bir sonraki güncellemede dosyayı yeniden üretmesi riskini taşır:
echo '!include conf.d/*.conf' >> /etc/dovecot/dovecot.conf
Hangisini seçerseniz seçin, değişiklikten önce dosyanın yedeğini web kökü dışında bir yere alın.
Kotanın uygulanması ile istemcinin kotayı görmesi ayrı şeylerdir. Kullanıcının posta istemcisinde "%80 dolu" uyarısı çıkması için IMAP protokolüne ayrı bir eklenti gerekir:
protocol imap {
mail_plugins = $mail_plugins imap_quota
}
Bu satır olmadan kota çalışır — kutu dolduğunda mesaj reddedilir — ama kullanıcı bunu önceden göremez, doluluk oranını yalnızca reddedilen mesajla öğrenir.
Değişiklikten sonra servisi yeniden başlatın ve sonucu kullanıcı bazında doğrulayın:
systemctl restart dovecot
doveconf -n | grep -i quota # etkin mi?
doveadm quota get -u kullanici@alanadi.com
Son komut kullanıcının mevcut kullanımını ve sınırını tablo hâlinde verir. STORAGE satırındaki limit sütunu boşsa kota hâlâ uygulanmıyordur.
Yeni kutular için kota anında geçerli olur. Zaten var olan kutularda ise Dovecot'un kota sayacı ilk erişimde yeniden hesaplanır; sabırsızsanız doveadm quota recalc -u kullanici@alanadi.com ile zorlayabilirsiniz.
Bu sorunun öğrettiği şey kota ayarının kendisi değil, yapılandırmanın nereden okunduğunu varsaymamak. Panelle kurulmuş yığınlarda dizin yapısı standart görünür ama dosyaların gerçekten dahil edilip edilmediği ayrı bir sorudur. doveconf -n, Nginx'te nginx -T, Apache'de apachectl -S aynı işi yapar: diskteki niyeti değil, çalışan gerçeği gösterir.
!include conf.d/*.conf yokdoveconf -n | grep -i quota boş dönüyorsa etkin değildirquota_rule2 = Trash:storage=+200M olmadan kullanıcı silerek yer açamazimap_quota eklentisi olmadan kullanıcı doluluk oranını göremezdoveadm quota get -u kullanici@alanadi.comÇünkü CyberPanel'in ürettiği /etc/dovecot/dovecot.conf dosyasında conf.d dizinini dahil eden satır yoktur. Dovecot yalnızca ana dosyayı okur. Dosyalarınız yerinde durur, izinleri doğrudur, sözdizimi geçerlidir — ama hiç açılmazlar. Bunu doveconf -n çıktısıyla saniyeler içinde doğrulayabilirsiniz.
Silinen mesaj çöp kutusuna taşınır ve çöp kutusu da aynı kotanın içindedir; dolayısıyla kullanım düşmez. Çözüm quota_rule2 = Trash:storage=+200M gibi bir kuralla çöp kutusuna ana kotanın üstüne ek pay vermektir. Alternatif olarak çöp kutusuna otomatik temizlik süresi tanımlanabilir.
Evet, ancak Dovecot kullanım sayacını tembel biçimde günceller; kutuya ilk erişimde yeniden hesaplanır. Hemen görmek isterseniz doveadm quota recalc -u kullanici@alanadi.com komutunu çalıştırın. Yeni oluşturulan kutularda böyle bir gecikme olmaz.
Teknik olarak evet, Dovecot'u standart davranışına döndürür. Riski şudur: panel bir güncellemede dovecot.conf dosyasını kendi şablonundan yeniden üretirse eklediğiniz satır kaybolur ve kota sessizce devre dışı kalır. Bu yüzden kota bloğunu doğrudan ana dosyaya yazmak ve değişikliği yedeklemek daha dayanıklıdır.