インターネットに関する大雑把な(そしてやや面倒な)研究では、文字のソートはさまざまなSieveスクリプトを使用してのみ提供されることが示されました。 しかし、私の意見では、これはユーザー(電子メールクライアントなど)ではなく、実際にソーターのルールを作成せず、適切なスクリプト言語を使用してプログラムフィルターを作成する管理者向けの方法です。
require ["fileinto", "reject", "regex", "subaddress", "envelope"]; #spam if header :contains "Subject" "[SPAM]" { reject "thank you"; stop; } if header :regex "Received" "from ([[:alnum:]\\-]{1,}\\.){3,}[[:alnum:]]{1,}.*" { reject "thank you"; stop; }
私はそれを理解することができますが、なぜ地獄、それは必要ですか? そして、同じ機能を必要としているが、上記は中国のリテラシーに類似している「単なる人間」をどうするか。 今日、主婦の指でシステムが研ぎ澄まされると、何十年も使用されてきたメールを分類する同じ愚かな方法の欠如は、少なくとも驚くべきことです。
前述の記事の断片は、トランスポートセクションにEximレターを配置するためのパスがデータベースからのクエリを形成する、ソートの独自の実装に遭遇しました。
mysql_delivery: driver = appendfile check_string = "" create_directory delivery_date_add directory = ${lookup mysql{SELECT CONCAT('/data/mail/${domain}/', `maildir`) \ FROM `mailbox` WHERE `username`='${local_part}@${domain}'}} directory_mode = 770 envelope_to_add group = mail maildir_format maildir_tag = ,S=$message_size message_prefix = "" message_suffix = "" mode = 0600
メッセージの送信者/件名の部分文字列の内容の定義に基づいてダムフィルターが機能するように、リクエストを少し追加し、imapフォルダーの名前を追加することを妨げるものはありません。
mysql_delivery: driver = appendfile check_string = "" create_directory delivery_date_add directory = ${lookup mysql{SELECT CONCAT('/data/mail/${domain}/', `maildir`, \ (select dir from sorter where ( \ ( \ (locate(text,'${sender_address}')!=0 and target='sender') \ or \ (locate(text,'${sg{${extract{Subject}{${sg{${sg{$message_headers}{ }{_spAce_}}}{:_spAce_}{=}}}}}{_spAce_}{ }}')!=0 and target='subject') \ ) \ and email='${local_part}@${domain}') or priority=0 order by priority desc limit 1 \ )) \ FROM `mailbox` WHERE `username`='${local_part}@${domain}'}} directory_mode = 770 envelope_to_add group = mail maildir_format maildir_tag = ,S=$message_size message_prefix = "" message_suffix = "" mode = 0600
その後、7キログラムのプリミティブPHPコードを作成して( ダウンロード )、特定のユーザーの並べ替えルールを作成します。文字を並べ替える必要があるという
必須のゼロエントリを持つソートルールを保存するためのテーブルを作成します。これにより、ルールがない場合に受信トレイ内の文字の配置が決定されます。
CREATE TABLE `sorter` ( `id` int(11) NOT NULL AUTO_INCREMENT, `priority` int(11) NOT NULL DEFAULT '0', `target` varchar(255) NOT NULL DEFAULT '', `text` varchar(255) NOT NULL DEFAULT '', `dir` varchar(255) NOT NULL DEFAULT '', `email` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ); INSERT INTO `sorter` SET `priority`=0;
管理者のスクリーンショット:
スクリプトは、ユーザーのサーバー上に既にあるフォルダーのリストを取得します。
システムは不完全であり、少なくとも3つの制限があります。
1.文字のエンコードがルールテーブルのエントリのエンコードと一致する場合にのみ、ロシアのエンコードで動作します。
2.優先順位の高い順に1つのルールのみが機能する(優先度が高いほど高い)ため、論理ANDのルールは実行できず、ORのみが実行されます。
3.処理するフィールドの数は、送信者と件名によって制限されます。
原則として、後で主題に限らず、必要に応じて他のヘッダーをサンプルに使用することができます。 RoundCubeのプラグインを作成するというアイデアもありましたが、それらの作成方法を確認した後、非常に残念ながらそれを採点することにしました(実装に興味のある人がそれを行うかもしれません:笑顔:)。 また、FreeBSD用のMySQL 5.5ポートの最新バージョンでsqlクエリがテストされたため、このクエリが古いバージョンでロールするかどうかはわかりません。