GNU/Linux >> Linux Esercitazione >  >> Linux

esegui sieve su maildir

Non c'è un modo semplice per farlo, ma secondo questo messaggio puoi scrivere uno script di shell per consegnare nuovamente i messaggi usando deliver di Dovecot program...quindi qualcosa del genere:

produce_message_list |
while read msg; do
  /usr/libexec/dovecot/deliver -d user < $msg && rm -f $msg
done

Dovrai sostituire produce_message_list con qualcosa che produce un elenco di messaggi da elaborare; possibilmente find farà ciò di cui hai bisogno.


Le versioni più recenti di dovecot e pidgeonhole ora sono dotate di un comando filtro setaccio. Quindi puoi scrivere uno script per scansionare tutte le caselle di posta alla ricerca di una cartella "INBOX.Refilter", quindi eseguire sieve-filter su quella cartella.

Questo script presuppone che tu abbia strutturato la tua cartella di posta come /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 ""

Anch'io ho cercato molto, raramente documentato.

Nel frattempo c'è un comando

sieve-filter

per questo, trovato su questo blog https://mebsd.com/configure-freebsd-servers/dovecot-pigeonhole-sieve-filter-refilter-delivered-email.html per un howto


Linux
  1. Linux – Come eseguire uno script sul blocco/sblocco dello schermo?

  2. Cosa fa Eco $? Fare??

  3. Comando eco di Linux

  4. Come eseguire uno script sul blocco/sblocco dello schermo?

  5. Come eseguire un comando in background con un ritardo?

16 Esempi di comandi Echo in Linux

Come eseguire Windows 95 su Linux

Come eseguire uno script Bash

Come fare eco in un file

Qual è il modo più veloce per eseguire uno script?

Linux:comando di pianificazione da eseguire una volta dopo il riavvio (equivalente a RunOnce)