GNU/Linux >> Tutoriales Linux >  >> Linux

ejecutar tamiz en maildir

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


Linux
  1. ¿Comodines dentro de las comillas?

  2. ${!foo} ¿Y Zsh?

  3. ¿Suprimir el eco de la invocación del comando en el archivo MAKE?

  4. Ejecute una aplicación Java como servicio en Linux

  5. ¿Cómo ejecutar un comando en segundo plano con un retraso?

16 ejemplos de comandos de eco en Linux

Cómo ejecutar Windows 95 en Linux

Cómo ejecutar un script Bash

Cómo hacer eco en un archivo

¿Cuál es la forma más rápida de ejecutar un script?

Linux:programe el comando para que se ejecute una vez después de reiniciar (equivalente a RunOnce)