GNU/Linux >> Linux の 問題 >  >> Linux

maildir で sieve を実行する

これを行う簡単な方法はありませんが、このメッセージに従って、Dovecot の deliver を使用してメッセージを再配信するシェル スクリプトを作成できます。 プログラム...つまり、次のようなもの:

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

produce_message_list を置き換える必要があります 処理するメッセージのリストを生成するものを使用します。おそらく find


新しいバージョンの dovecot と pidgeonhole には、sieve-filter コマンドが付属しています。したがって、「INBOX.Refilter」フォルダーのすべてのメールボックスをスキャンするスクリプトを作成し、そのフォルダーに対して sieve-filter を実行できます。

このスクリプトは、メール フォルダが /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 ""

私もたくさん検索しましたが、文書化されることはめったにありません.

一方、コマンドがあります

sieve-filter

それについては、このブログ https://mebsd.com/configure-freebsd-servers/dovecot-pigeonhole-sieve-filter-refilter-delivered-email.html でハウツーを見つけてください


Linux
  1. 引用の中のワイルドカード?

  2. Linux –LinuxでMacOs Xアプリケーションを実行しますか?

  3. エコー$は何ですか?行う??

  1. .bashrcでエクスポートを使用しますか?

  2. エコーコマンドでフォントを変更しますか?

  3. 画面のロック/ロック解除でスクリプトを実行する方法は?

  1. Linux –画面上でスクリプトを実行する方法ロック/ロック解除?

  2. $ {!foo}そしてZsh?

  3. Linux:再起動後にコマンドを 1 回実行するようにスケジュールする (RunOnce と同等)