Sieve:サーバー側のメールフィルタリング

GoogleがReaderを閉じた後、大企業への信頼を失い、重要なタスクを解決するツールになりました。 読書室、アグリゲーター、ポルチーニなどを備えた独自のルナパークを建設することにしました。 ドメインのメールは、最初に頭に浮かぶものです。 MXレコードの登録、ローカル配信用のPostfixの設定、Dovecot IMAPサーバーとRoundcubeメールクライアントのインストール、最初に「大規模」システムの機能を繰り返す問題ではありません。 既存の指示を複製することはせず、明白でない点のみを説明します。



Gmailで私に合わないものは何ですか? これはラベルのイデオロギーであり、同じ文字に複数添付することができ、IMAPではそれらをフォルダーの形式で表示します。 その結果、ルートフォルダーは常に文字で一杯になり、私はそのような人(私の場合はユニークかもしれません)で、「余分な」メールをすべて削除し、フォルダーに「必要な」ものをすべて入れます。 ウェブストア、フォーラム、サービスなどからのすべての通知を消去しますが、これはGoogleのイデオロギー「場所が無限の場合に削除する理由」に適合しません。 Googleは、できる限り私と一緒に見たいと思っていますが、ゴミを見たくありません。 次に、iCloud / me.comを使用しましたが、すべてがシンプルです。受信メールをソートするためのルールが機能しないだけです。



だから、タスク:DovecotがIMAPフォルダー自体にメールをレイアウトすること。 正直なところ、「Roundcubeのフィルタリング設定はどこですか?」を検索するのに約20分かかりました。その後、指示を読み始めました。 残念ながら、ウェブ上で見つかるすべてのものには、踏み込めるレーキの完全なリストが含まれていないので、ここで簡単に説明します。



最初に、Cyrusメールサーバーで作業中にCyrusoftによって作成されたフィルタリングルールを記述するための言語全体である、 sieveという単語を学習する必要があります(夜間に覚えています)。 次の自明のルールを記述できます。



require ["fileinto"]; # rule:[LinkedIn] if header :contains "From" "linkedin.com" { fileinto "INBOX/LinkedIn"; stop; } # rule:[Drupal Alerts] if header :contains "Subject" "yet another home page" { fileinto "INBOX/Drupal Alerts"; stop; } if header :contains "From" [ "user@example.com" ] { addflag "\\flagged"; fileinto "Trash"; stop; } # rule:[Paypal] if allof (header :contains "From" "paypal") { fileinto "INBOX/Ebay, Paypal"; stop; }
      
      







もちろん、新しいフィルタリングルールを登録するためにコンソールに行きたくありません。幸いなことに、メールクライアントがサーバー上のルールをルールできるようにするmanageieveプロトコルがあります。 幸いなことに、DovecotとRoundcubeは両方とも両方の機能をサポートしています。 そして、レーキが始まります。



最初に、seiveを有効にするために行う最も簡単で最も自然なことは、Dovecot全体に対してmail_plugins =グローバルなどこかに設定することです。 これは間違っています! 次のようになります。



 Error: dlopen(/usr/lib64/dovecot/lib90_sieve_plugin.so) failed: /usr/lib64/dovecot/libdovecot-sieve.so.0: undefined symbol: mail_deliver_get_log_var_expand_table
      
      







この変数は、lda、ローカル配信の場合、/ etc / dovecot / conf.d / 15-lda.confで設定する必要があります。 manageieveをDovecotとRoundcubeの両方に含めても問題は発生しません(プラグインは標準パッケージに含まれています)。ポートを登録することを忘れないでください。 ルールの記述を開始することはできますが、メールはクライアントからのフォルダーごとにソートされますが、「ローカルプロバイダー」は/ home / usernameではなく/ var / mail / usernameにあるPostfixおよびINBOXであるため、機能しません。 main.cfにmailbox_command = / usr / lib / dovecot / deliver -d "$ USER"を記述する必要があります。 今ではすべてがうまくいっているようです。ほぼすべての文字がほぼすべてのルールに従ってレイアウトされています。 メールがフォルダに入らない理由を見つけようと一日を過ごし、私の実験から同僚を夢中にさせました。 エンベロープと配信データが異なるため、ヘッダーのプロパティについては説明しなかったと思いました(通信はメーリングリストのメーリングサーバーで行われますが、相手から対話者まではすべてが見えるはずです)。 それから私はエラーを見ました:



 Mar 16 17:53:01 DJBZ002 dovecot: lda(shaman007): Error: write() failed with mbox file /home/shaman007/mail/INBOX/LOR: File too large (process was started with ulimit -f limit) Mar 16 17:53:01 DJBZ002 dovecot: lda(shaman007): Error: sieve: msgid=<d068a42487535146ce3e7ec8b6557b27@andreybondarenko.com>: failed to store into mailbox 'INBOX/LOR': Internal error occurred. Refer to server log for more information. [2013-03-16 17:52:57] Mar 16 17:53:01 DJBZ002 dovecot: lda(shaman007): sieve: msgid=<d068a42487535146ce3e7ec8b6557b27@andreybondarenko.com>: stored mail into mailbox 'INBOX' Mar 16 17:53:01 DJBZ002 dovecot: lda(shaman007): Error: sieve: execution of script /home/shaman007/.dovecot.sieve failed, but implicit keep was successful (user logfile /home/shaman007/.dovecot.sieve.log may reveal additional details) Mar 16 17:53:01 DJBZ002 postfix/local[13359]: 4575811F76E: to=<shaman007@andreybondarenko.com>, orig_to=<me@andreybondarenko.com>, relay=local, delay=3.9, delays=0.21/0.02/0/3.7, dsn=2.0.0, status=sent (delivered to command: /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT") Mar 16 17:53:01 DJBZ002 postfix/qmgr[29435]: 4575811F76E: removed
      
      







ファイルが大きすぎます! 最大100メガバイト! Dovecotエラーをトリガーしますが、ポイントはPostfix mailbox_size_limitパラメーターであることが判明しました。 デフォルトでは、5またはメガバイトがありますが、0に設定する必要があります。これはすべてすくいのようです。



All Articles