Il n'y a pas de moyen facile de le faire, mais selon ce message, vous pouvez écrire un script shell pour renvoyer les messages en utilisant le deliver
de Dovecot programme... donc quelque chose comme ça :
produce_message_list |
while read msg; do
/usr/libexec/dovecot/deliver -d user < $msg && rm -f $msg
done
Vous devrez remplacer produce_message_list
avec quelque chose qui produit une liste de messages à traiter ; éventuellement find
fera ce dont vous avez besoin.
Les nouvelles versions de dovecot et pidgeonhole sont désormais livrées avec une commande sieve-filter. Vous pouvez donc écrire un script pour analyser toutes les boîtes aux lettres à la recherche d'un dossier "INBOX.Refilter", puis exécuter sieve-filter sur ce dossier.
Ce script suppose que vous avez structuré votre dossier de messagerie sous la forme /var/vmail/domain/user.
#!/bin/bash
FIND=/usr/bin/find
GREP=/bin/grep
RM=/bin/rm
SED=/bin/sed
SORT=/bin/sort
# BASE should point at /var/vmail/ and should have trailing slash
BASE="/var/vmail/"
RESORTFOLDER="INBOX.Refilter"
SEARCHFILE="dovecot-uidlist"
echo ""
echo "Search for messages to resort under ${BASE}"
echo "Started at: " `date`
echo "Looking for mailboxes with ${RESORTFOLDER}"
echo ""
# since RHEL5/CentOS5 don't have "sort -R" option to randomize, use the following example
# echo -e "2\n1\n3\n5\n4" | perl -MList::Util -e 'print List::Util::shuffle <>'
DIRS=`$FIND ${BASE} -maxdepth 3 -name ${SEARCHFILE} | \
$SED -n "s:^${BASE}::p" | $SED "s:/${SEARCHFILE}$:/:" | \
perl -MList::Util -e 'print List::Util::shuffle <>'`
# keep track of directories processed so far
DCNT=0
for DIR in ${DIRS}
do
UD="${BASE}${DIR}.${RESORTFOLDER}"
D=`echo "$DIR" | tr '/' ' ' | awk '{print $1}'`
U=`echo "$DIR" | tr '/' ' ' | awk '{print $2}'`
if [ -d "$UD/cur" ]
then
echo "`date` - $DIR"
echo " domain: $D"
echo " user: $U"
FILES=`find $UD/cur/ $UD/new/ -type f -name '*' | wc -l`
echo " files: $FILES"
if [[ $FILES -ge 1 ]]; then
echo "Run $FILES messages back through the sieve filter."
# -c2 means run at best-effort, -n7 is least priority possible
ionice -c2 -n7 sieve-filter -e -W -C -u "${U}@${D}" "${BASE}${DIR}.dovecot.sieve" "${RESORTFOLDER}"
fi
echo ""
fi
# the following is debug code, to stop the script after N directories
#DCNT=$(($DCNT+1))
#echo "DCNT: $DCNT"
#if [[ $DCNT -ge 5 ]]; then exit 0; fi
done
echo ""
echo "Finished at:" `date`
echo ""
J'ai beaucoup cherché aussi - rarement documenté.
En attendant il y a une commande
sieve-filter
pour cela, trouvé sur ce blog https://mebsd.com/configure-freebsd-servers/dovecot-pigeonhole-sieve-filter-refilter-delivered-email.html pour un howto