По умолчанию при создании почтового ящика в postfixadmin, создается папка для каждого почтового ящика. При удалении почтового ящика через postfixadmin удаляется только пользователь, т.е. прекращается доступ, но папка почтового ящика со всеми письмами остается. Если мы создадим почтовый ящик с тем же логином, данные останутся те-же, как если бы мы не удаляли почтовый ящик. В данном руководстве мы настроим автоматическое удаление папок почтовых ящиков при удалении их в PostfixAdmin.
Откроем файл конфигурации:
/usr/share/nginx/html/postfixadmin/config.inc.php
$CONF['mailbox_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';
Создадим файл скрипта, который будет удалять папки почтовых ящиков:
#touch /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
#!/bin/sh
# Example script for removing a Maildir from a Courier-IMAP virtual mail
# hierarchy.
# The script looks at arguments 1 and 2, assuming that they
# indicate username and domain, respectively.
# The script will not actually delete the maildir. I moves it
# to a special directory which may once in a while be cleaned up
# by the system administrator.
# This script should be run as the user which owns the maildirs. If
# the script is actually run by the apache user (e.g. through PHP),
# then you could use "sudo" to grant apache the rights to run
# this script as the relevant user.
# Assume this script has been saved as
# /usr/local/bin/postfixadmin-mailbox-postdeletion.sh and has been
# made executable. Now, an example /etc/sudoers line:
# apache ALL=(courier) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
# The line states that the apache user may run the script as the
# user "courier" without providing a password.
# Change this to where you keep your virtual mail users' maildirs.
basedir=/home/mail
# Change this to where you would like deleted maildirs to reside.
trashbase=/var/spool/deleted-maildirs
if [ ! -e "$trashbase" ]; then
echo "trashbase '$trashbase' does not exist; bailing out."
exit 1
fi
if [ `echo $1 | fgrep '..'` ]; then
echo "First argument contained a double-dot sequence; bailing out."
exit 1fi
if [ `echo $2 | fgrep '..'` ]; thenecho "First argument contained a double-dot sequence; bailing out."
exit 1fi
#subdir=`echo "$1" | sed 's/@.*//'`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 "Strainge - directory '$parent' exists, but is not a directory."
echo "Bailing out."
exit 1else
mkdir -p "$parent"
if [ $? -ne 0 ]; thenecho "mkdir -p '$parent' returned non-zero; bailing out."
exit 1
fi
fi
fi
if [ ! -e "$maildir" ]; then
echo "maildir '$maildir' does not exist; nothing to do."
exit 1
fi
if [ -e "$trashdir" ]; then
echo "trashdir '$trashdir' already exists; bailing out."
exit 1
fi
# Move or delete (Move enebled by Default)
mv $maildir $trashdir
#rm -rf $maildir
exit $?
Создадим папку для хранения удаленных ящиков
#mkdir /var/spool/deleted-maildirs
Для этой папки можно настроить периодичность очистки, данная опция позволяет избежать потери при случайном удалении почтового ящика или на случай если данные могут понадобиться спустя какое-то время.
Теперь нам нужно дать права пользователю vmail на запуск скрипта в /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
Теперь папки почтовых ящиков при удалении перемещаются в отдельную папку /var/spool/deleted-maildirs Если Вам нужно удалять папку почтового ящика сразу, включите строку удаления и выключите сроку переноса:
mv $maildir $trashdir
rm -rf $maildir
Готово.