No hay una manera fácil de hacer esto, pero de acuerdo con este mensaje, puede escribir un script de shell para volver a enviar mensajes usando el deliver
de Dovecot. programa... entonces algo como esto:
produce_message_list |
while read msg; do
/usr/libexec/dovecot/deliver -d user < $msg && rm -f $msg
done
Tendrás que reemplazar produce_message_list
con algo que produce una lista de mensajes para su procesamiento; posiblemente find
hará lo que necesites.
Las versiones más nuevas de dovecot y pidgeonhole ahora vienen con un comando de filtro de tamiz. Por lo tanto, puede escribir una secuencia de comandos para escanear todos los buzones de correo en busca de una carpeta "INBOX.Refilter" y luego ejecutar el filtro de tamiz en esa carpeta.
Este script asume que ha estructurado su carpeta de correo como /var/vmail/dominio/usuario.
#!/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 ""
También he buscado mucho, rara vez documentado.
Mientras tanto hay un comando
sieve-filter
para ello, se encuentra en este blog https://mebsd.com/configure-freebsd-servers/dovecot-pigeonhole-sieve-filter-refilter-delivered-email.html para obtener instrucciones