Varsayılan olarak, PostfixAdmin ile posta kutusu oluşturduğunuzda her posta kutusu için bir klasör oluşturulur. PostfixAdmin üzerinden posta kutusunu sildiğinizde sadece kullanıcı silinir; yani erişim durdurulur, ancak posta kutusunun klasörü tüm e-postalarla birlikte kalır. Aynı kullanıcı adıyla tekrar posta kutusu oluşturursanız, veriler sanki posta kutusu silinmemiş gibi kalır. Bu kılavuzda, PostfixAdmin'de posta kutusu silindiğinde posta kutusu klasörlerinin otomatik olarak nasıl silineceğini ayarlayacağız.
Ayrıca, zaten yapılandırılmış bir posta sunucusu VPS siparişi verebilirsiniz; nasıl yapılandırıldığını buradan inceleyebilirsiniz:
Yapılandırma dosyasını açalım:
/usr/share/nginx/html/postfixadmin/config.inc.php
$CONF['mailbox_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';
Posta kutusu klasörlerini silecek bir betik dosyası oluşturalım:
#touch /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
#!/bin/sh
Courier-IMAP sanal posta yapısından bir Maildir silmek için örnek bir betik.
Bu betik, 1. ve 2. argümanları kullanıcı adı ve alan adı olarak değerlendirir.
Bu betik, maildir'i gerçekten silmez. Onu, sistem yöneticisi tarafından
zaman zaman temizlenebilecek özel bir klasöre taşır.
Bu betik, posta klasörlerine sahip kullanıcı olarak çalıştırılmalıdır.
Eğer betik apache kullanıcısı tarafından çalıştırılıyorsa (örneğin PHP ile),
apache kullanıcısına sudo ile bu betiği ilgili kullanıcı olarak çalıştırma yetkisi verilebilir.
Bu betik /usr/local/bin/postfixadmin-mailbox-postdeletion.sh olarak kaydedilmeli ve
çalıştırılabilir hale getirilmelidir. Örnek /etc/sudoers satırı:
apache ALL=(courier) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
Bu satır, apache kullanıcısının "courier" kullanıcısı olarak
şifre girmeden bu betiği çalıştırabileceğini belirtir.
basedir=/home/mail
Silinmiş maildirlerin depolanacağı klasörü buraya ayarlayın.
trashbase=/var/spool/deleted-maildirs
if [ ! -e "$trashbase" ]; then
echo "trashbase '$trashbase' mevcut değil; işlem durduruluyor."
exit 1
fi
if [ echo $1 | fgrep '..'
]; then
echo "Birinci argüman iki nokta içeriyor; işlem durduruluyor."
exit 1
fi
if [ echo $2 | fgrep '..'
]; then
echo "İkinci argüman iki nokta içeriyor; işlem durduruluyor."
exit 1
fi
subdir=echo "$1"
maildir="${basedir}/$2/${subdir}"
trashdir="${trashbase}/$2/date +%F_%T
_${subdir}"
parent=dirname "$trashdir"
if [ ! -d "$parent" ]; then
if [ -e "$parent" ]; then
echo "Tuhaf - dizin '$parent' mevcut ama bir klasör değil."
echo "İşlem durduruluyor."
exit 1
else
mkdir -p "$parent"
if [ $? -ne 0 ]; then
echo "mkdir -p '$parent' hatası; işlem durduruluyor."
exit 1
fi
fi
fi
if [ ! -e "$maildir" ]; then
echo "maildir '$maildir' mevcut değil; yapılacak bir şey yok."
exit 1
fi
if [ -e "$trashdir" ]; then
echo "trashdir '$trashdir' zaten mevcut; işlem durduruluyor."
exit 1
fi
# Taşıma veya silme işlemi (Varsayılan olarak taşıma etkin)
mv $maildir $trashdir
#rm -rf $maildir
exit $?
Silinen posta kutularını depolamak için bir klasör oluşturalım
mkdir /var/spool/deleted-maildirs
Bu klasör için bir temizlik periyodu ayarlayabilirsiniz; bu seçenek, yanlışlıkla silinen posta kutularının veya ileride gerekebilecek verilerin kaybını önler.
Şimdi vmail kullanıcısına betiği çalıştırma izni vermemiz gerekiyor
# User privilege specification
root ALL=(ALL:ALL) ALL
www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
Artık posta kutusu klasörleri silindiğinde /var/spool/deleted-maildirs klasörüne taşınıyor. Eğer posta kutusu klasörünü hemen silmek isterseniz, taşıma satırını devre dışı bırakıp silme satırını etkinleştirin:
mv $maildir $trashdir
rm -rf $maildir
Tamamlandı.