0

以下で使用しているものは機能しますが、テストメールが受信トレイとターゲットフォルダー (Stuff) の両方に届きます。imap メッセージの重複を避ける方法はありますか?

VERBOSE=on
PATH=/usr/bin:/usr/local/bin
MAILDIR=$HOME/boxes/domain.com/fred^/.imap/
LOGFILE=$HOME/proclog
SHELL=/bin/sh

:0:
* ^Subject:.*test
Stuff

ログ結果:

procmail: Assigning "SHELL=/bin/sh"
procmail: Match on "^Subject:.*test"
procmail: Locking "Stuff.lock"
procmail: Assigning "LASTFOLDER=Stuff"
procmail: Opening "Stuff"
procmail: Acquiring kernel-lock
procmail: Unlocking "Stuff.lock"
procmail: Notified comsat: "username@number:/usr/home/username/boxes/domian.com/fred^/.imap//Stuff"
From person@email.com Sat Jan 24 00:04:42 2015
Subject: test
Folder: Stuff                                  2213

更新:一致が見つかったときにメッセージが重複していると仮定すると、次のように並べ替えを試み、重複を検出して削除しました。

VERBOSE=yes
LOGABSTRACT=all
PATH=/usr/bin:/usr/local/bin
LOGFILE=$HOME/proclog
SHELL=/bin/sh

MAILDIR=$HOME/boxes/mydomain.com/
INBOX=$HOME/boxes/mydomain.com/fred
STUFF=$HOME/boxes/mydomain.com/fred^/.imap/Stuff

:0
* ^Subject:.*test
${STUFF}

:0 Whc: msgid.lock
| formail -D 4096 $MAILDIR/msgid.cache

:0 a:
dev/null

私はこの例も見ました:

:0 Wh:dup
| formail -D 4096 $MAILDIR/msgid.cache 
4

2 に答える 2

1

思慮深いご意見をお寄せいただき、誠にありがとうございました。あなたの絶対的な権利は、procmail とは関係なく、Pair Networks のサポートを逃したことです。ところで、他のレシピは使用していません。

幸運なことに、qmail に邪魔されずにレシピを書く方法を説明している非常に有益な Pair Networks ユーザーからの古い投稿を見つけました。

http://ziggr.com/pairmail/

EXITCODE=99 は、qmail に各メッセージの配信を処理すること、および qmail がメールボックスに配信する必要がないことを伝えます。これを行わなかった場合、qmail はデフォルトのリターン コード 0 (OK) を見て、「フィルタ プログラムは電子メールが受け入れ可能であると述べたので、配信する必要がある」と解釈します。これにより、メールボックスに到着するすべてのメールのコピーが複製され、スパム/ハム メールボックスに到着するフィルタリングされたスパム/ハム コピーが作成されます。

そのページには、qmail がメールを処理する方法を示す図と、spamassassin フィルタリングを復元するためのレシピが含まれています。私自身のフィルタリングは、INBOX に重複して到着することなく機能し、スパム フィルタリングが正常に機能するかどうかを確認するのを待っています。

LOGFILE=$HOME/proclog
VERBOSE=YES 

# prevent qmail (the program that is calling procmail 
# as a filter) from delivering the original mail.
EXITCODE=99 

MAILDIR=$HOME/boxes/domain.com
INBOX=$MAILDIR/fred
GREY=$MAILDIR/fred^/.imap/grey
JUNK=$MAILDIR/fred^/.imap/Junk
TEST=$MAILDIR/fred^/.imap/Test 


# Spam level 5.0 or greater 
:0
* ^X-Spam-Level: \*\*\*\*\* 
${JUNK}

# Spam level 2.0-4.9: hold in grey area 
:0
* ^X-Spam-Level: \*\* 
${GREY} 

:0:
* ^Subject:.*test
${TEST}

# Spam level < 2.0: it's probably real email, deliver as normal 
:0:
${INBOX}
于 2015-01-28T07:20:18.020 に答える
0

あなたの問題は Procmail とは無関係のようです。重複が Procmail によって処理された場合 (そして、すべてのレシピを表示している場合)、Stuff受信トレイではなく、処理中のメッセージと同じメールボックスに配信されます。プロバイダーの Postfix 構成を調べるか、単にこの問題をサポートに持ち込む必要があります。

以上のことを踏まえて、Procmail の処理についていくつか明確にすることができます。メッセージを配信した後に重複検出を実行しても意味がありません。メッセージが配信されると、Procmail が終了し、次のレシピが実行されることはありません。

あなたが持っているレシピは、スペルが間違っているという点で少し間違っています/dev/nullが、メッセージをコピーして捨てるだけであるという点で非常に非効率的です。重複を破棄するための標準的なレシピは単純です

:0Wh:msgid.lock
| formail -D 8192 msgid.cache

しかし何よりも、これは配信レシピの前に置く必要があります。これは、メッセージが以前に見たメッセージの複製である場合、事実上、ビット天国に配信されます。そのため、Procmail はその場で処理を停止します。(「配信」は、メッセージがformail配信のために に渡されるために発生します。もちろん、どこにも配信しません。重複していない場合、formail-- この特定のモードでは、-Dオプションを使用すると -- エラーが通知され、Procmail が発生します。エラーをキャッチし、代わりに成功することを期待して、次のレシピで再開します。)

ロック ファイルを何と呼ぶか​​は問題ではありませんが、msgid.lockかなり標準的なものです。重要なことは、Procmail の 2 つのインスタンスが同じロック ファイルを使用する必要があるということです。そのため、それを Shirley と呼んで問題を解決できます。変更しない限り、何でもかまいません (ただし、Shirley は悪いその意味を忘れて ISP のサポートに電話し、シャーリーがあなたのマシンをハッキングしたようだとヒステリックに主張するからです)。

フラグ付きのレシピはc、マニュアル ページから不完全に転記されていprocmailex(5)ます。念のため、重複の疑いがあるものを捨てるのではなく、別のメールボックスに保管する方法の例です。

シャーリーと呼ばないで

于 2015-01-27T08:20:01.597 に答える