/////////////////////////////////////////////////////////////////////////////// // BkBsfilWrapper 0.0.0.51 /////////////////////////////////////////////////////////////////////////////// NABEYA Kenichi さんの公開されている bsfilter を利用した Becky! 用の迷惑メール フィルタープラグインです。 なお、作成に使用した Becky! Plug-In SDK は(2011/06 現在で)最新の B2PinSDK-25000.zip です。 動作環境は以下のとおりです。 OS Windows XP SP3 以上 Windows Vista SP1 以上 Windows 7 Windows 8 Windows 8.1 Windows 10 Becky! Becky! Ver.2.50 以上 Ruby (bsfilter(スクリプト版) を使用する場合のみ必要です) bsfilter(スクリプト版) に対応したバージョン 実行には、別途、bsfiter.exe が(そして、もちろん Becky! も)必要です。 ※bsfilter.exe 使用時に必要な iconv.dll は当方でビルドしたものを同梱してあります。 また、バージョン 0.0.0.43 以降で bsfilter(スクリプト版) を使用する場合には、 別途、bsfilter(スクリプト版) と ruby.exe が必要になります。 オブジェクト指向スクリプト言語 Ruby (https://www.ruby-lang.org/) などからダウンロードし、 事前にインストールしておいてください。 ※必ず bsfilter(スクリプト版) に対応したバージョンをご使用ください。 対応していないバージョンの場合、正しく動作せず、Becky! ごと落ちる場合があります。 ※テストにはバージョン「ruby 2.1.0p0 (2013-12-25 revision 44422)」を使用しました。 //----------------------------------------------------------------------------- // ご注意 //----------------------------------------------------------------------------- o 本プラグインでは、Becky! のデータフォルダ(Becky! のメールデータなどを格納する フォルダ)下に設定ファイルや bsfilter のデータベースを作成します。 Vista 以降の Windows では Program Files フォルダ配下への書き込みが制限されてい るため、もし、Vista 以降をお使いで、Program Files 下にデータフォルダを作ってい る場合、書き込みができず、本プラグインは動作しないと思います。 データフォルダを別の(書き込み可能な)フォルダにしていただくか、データフォルダに 書き込みできる権限を付与してください。 ※実際には VirtualStore 行きになるとは思うのですが、そういう環境でテストしてい ないので。。。 o 動作には何の保証もありません。バグは確実にあります。 大変申し訳ありませんが、本プラグインを利用して発生するであろう損害の責任は持 てませんので、必ずご自身の責任においてご使用ください。m(_*_)m //----------------------------------------------------------------------------- // 手作業でのインストール //----------------------------------------------------------------------------- o 別途 bsfiter.exe または bsfilter(スクリプト版) が必要になります。 bsfilter は下記サイトからダウンロードして下さい。 ・bsfilter プロジェクト(NABEYA Kenichi 様) http://sourceforge.jp/projects/bsfilter/ 日本語完全対応の学習型ベイジアン・スパム・フィルタ o Becky! のプラグインフォルダ(\Program Files\RimArts\B2\PlugIns\ 等)に BkBsfilWrapper.dll をコピーします。 o Becky! のプラグインフォルダ下にフォルダ BkBsfilWrapper を作成し、その下に別途 ダウンロードした以下のファイルをコピーします。 ・bsfiter.exe を使う場合 bsfilter.exe iconv.dll ・bsfilter(スクリプト版) を使う場合 bsfilter - ※Ruby スクリプトの方です ディレクトリ構成とファイルの配置は以下のようになります。 ※[\Program Files\] 下に Bekcy! をインストールしている場合です。 [\Program Files\RimArts\B2\PlugIns\] BkBsfilWrapper.dll - BkBsfilWrapper プラグイン本体 [\Program Files\RimArts\B2\PlugIns\BkBsfilWrapper\] bsfilter.exe iconv.dll あるいは bsfilter o Becky! を再起動します。 o bsfilter(スクリプト版) を使用する場合は、インストールの完了後、 プラグインの設定で「その他の設定」-「bsfilter スクリプトを利用する」にチェックを入れ、 「ruby.exe のパス」に事前にインストール済みの ruby.exe を指定してください。 //----------------------------------------------------------------------------- // 使い方 //----------------------------------------------------------------------------- 本プラグインが Becky! に認識されると、Becky! のメニューの [ツール] - [プラグイ ンの設定] に [BkBsfilWrapper] が追加されます。ここから本プラグインの設定を行う ことができます。 また、メールを選択して右クリックした時に表示されるコンテキストメニューに [bsfilter (BkBsfilWrapper)] が追加されます。ここから本プラグインの操作を行うこ とができます。 o 受信時の判定と処置 メールを受信した際には、受信メールが spam かどうかを判定した後、 プラグイン設定の [動作設定] - [spam と判定されたメールの処置] に従ってメール を処理します。 o 学習 学習させたい対象のメールを選び(複数選択可)、右クリックで表示されるコンテキス トメニューの [bsfilter (BkBsfilWrapper)] の中から、実行したい bsfilter のコマ ンドを選んで下さい。 [--add-spam + --update] [--add-clean + --update] [--sub-spam + --update] [--sub-clean + --update] 対象のメールを学習した後、確率データベースを更新します。 ※わかりやすいかと思い、bsfilter のコマンド名をそのまま使わせていただいていま す。 o メールの spam としての学習と処置 spam として学習・処置したい対象のメールを選び(複数選択可)、右クリックで表示さ れるコンテキストメニューの [bsfilter (BkBsfilWrapper)] の中から、 [メールを spam 処置] を選んで下さい。 対象のメールを --add-spam で学習した後、--update で確率データベースを更新し、 プラグイン設定の [動作設定] - [spam と判定されたメールの処置] に従ってメール を処理します。 o 受信済みのメールの判定と処置 判定・処置したい対象のメールを選び(複数選択可)、右クリックで表示されるコンテ キストメニューの [bsfilter (BkBsfilWrapper)] の中から、[メールを判定・処置] を選んで下さい。 対象のメールが spam かどうかを判定した後、プラグイン設定の [動作設定] - [spam と判定されたメールの処置] に従ってメールを処理します。 o メールが spam と判定されるかどうかの確認 確認したいメールを選び(1 通のみ選択可)、右クリックで表示されるコンテキストメ ニューの [bsfilter (BkBsfilWrapper)] の中から、[メールを1通のみ判定(テスト)] を選んで下さい。 対象のメールの判定結果を表示します。なお、結果を表示するだけですので、メール の判定結果によらず、対象のメールに対して何の処置も行われません。 o 確率データベースの更新 右クリックで表示されるコンテキストメニューの [bsfilter (BkBsfilWrapper)] の中 から、[--update] を選んで下さい。 確率データベースを更新します。 学習時および spam としての学習と処置時は、最後に確率データベースを更新するよ うにしているため、改めての確率データベースの更新は不要です。 bsfilter の設定で判定方式を変更した場合などに、確率データベースを更新する必要 があるようなので、機能を付けました。 o データベースの状態を表示 右クリックで表示されるコンテキストメニューの [bsfilter (BkBsfilWrapper)] の中 から、[--show-db-status] を選んで下さい。 データベースの状態を表示します。 o メールの spam ヘッダを除く 受信時の判定・処置および spam としての学習でメールに付加された spam を表すヘッ ダを取り除きたい場合、対象のメールを選び(複数選択可)、右クリックで表示される コンテキストメニューの [bsfilter (BkBsfilWrapper)] の中から、 [メールのspamヘッダを除く] を選んで下さい。 プラグイン設定の [動作設定] - [spam と判定されたメールの処置] - [ヘッダを付加] の [ヘッダ] に設定されているヘッダフィールド名を持つヘッダを、 対象のメールから探し、ヘッダが存在すれば取り除きます。 この操作は、[動作設定] - [spam と判定されたメールの処置] が、[ヘッダを付加] 以外に設定してあっても動作します。 ただし、メールから探すヘッダフィールド名は、[ヘッダを付加] の [ヘッダ] に設定 されている値のみであるため(履歴などは保持していないため)、過去に [ヘッダ] の 値を何度か変更しており、別の [ヘッダ] 値で spam ヘッダが付加されているメール については、それらのヘッダを取り除くことはできません。 どうしてもそれらのヘッダを取り除きたい場合は、大変お手数ですが、一旦、 [ヘッダを付加] の [ヘッダ] の値を以前のヘッダ情報に設定しなおしてから操作を行っ て下さい。 o 差出人をホワイトリストに追加 受信済みのメールの差出人をホワイトリストに追加する場合、対象のメールを選び(複 数選択可)、右クリックで表示されるコンテキストメニューの [bsfilter (BkBsfilWrapper)] の中から、[差出人をホワイトリストに追加]を選んで 下さい。 メールの From に書かれているメールアドレスをホワイトリストに追加します。 o 差出人ドメインをホワイトリストに追加 受信済みのメールの差出人のドメインをホワイトリストに追加する場合、対象のメー ルを選び(複数選択可)、右クリックで表示されるコンテキストメニューの [bsfilter (BkBsfilWrapper)] の中から、[差出人ドメインをホワイトリストに追加] を選んで下さい。 メールの From に書かれているメールアドレスのドメイン部分をホワイトリストに追 加します。 o 差出人をホワイトリストから削除 受信済みのメールの差出人をホワイトリストから削除する場合、対象のメールを選び (複数選択可)、右クリックで表示されるコンテキストメニューの [bsfilter (BkBsfilWrapper)] の中から、[差出人をホワイトリストから削除]を選ん で下さい。 メールの From に書かれているメールアドレスをホワイトリストから削除します。 o 差出人ドメインをホワイトリストから削除 受信済みのメールの差出人のドメインをホワイトリストから削除する場合、対象のメー ルを選び(複数選択可)、右クリックで表示されるコンテキストメニューの [bsfilter (BkBsfilWrapper)] の中から、[差出人ドメインをホワイトリストから削除] を選んで下さい。 メールの From に書かれているメールアドレスのドメイン部分をホワイトリストから 削除します。 !!!!! 重要 !!!!! できるだけ自身のメールアドレスおよびドメインは登録しないようにしてありますが、 処理が完全ではないので、自身のメールアドレスから自身のメールアドレス宛に送っ たメールなどを使って、自身のメールアドレスやドメインをホワイトリストに登録し ないよう、ご注意下さい。 spam メールの中には From に To と同じアドレスを設定したものがよくあるため、 自身のメールアドレスやドメインをホワイトリストに登録してしまうと、これらのメー ルに対して spam の判定が行われなくなってしまいます。 o 差出人をNGワードに登録する 選択中のメールの差出人を NG ワードに登録します。 o 件名をNGワードに登録する 選択中のメールの件名を NG ワードに登録します。 ※NG ワードを有効にする場合は、プラグインの設定で [NGワード] タブの [NGワードを使用する] にチェックを入れてください。 ※処理がかなり重くなります。ご使用の際はご留意ください。 ※エンコードの関係でうまくマッチしない場合がありますこと、ご了承ください。 o 差出人をOKワードに登録する 選択中のメールの差出人を OK ワードに登録します。 o 件名をOKワードに登録する 選択中のメールの件名を OK ワードに登録します。 ※OK ワードを有効にする場合は、プラグインの設定で [OKワード] タブの [OKワードを使用する] にチェックを入れてください。 ※処理がかなり重くなります。ご使用の際はご留意ください。 ※エンコードの関係でうまくマッチしない場合がありますこと、ご了承ください。 ※OK ワードに合致したメールは spam チェックされませんので(ホワイトリストと同じ)、 ご注意下さい。 //----------------------------------------------------------------------------- // プラグインの設定 //----------------------------------------------------------------------------- Becky! のメニューの [ツール] - [プラグインの設定] の [BkBsfilWrapper] からプラ グインの設定を行えます。 o [動作設定] ・起動時に bsfilter データベースを参照しない 本プラグインでは、起動時に行う初期化で bsfilter に対して --show-db-status を行い、bsfilter が利用できることを確認しています。 この動作を止めたい場合は、チェックを入れて下さい。 ・処理前にメッセージボックスを表示しない コンテキストメニューから本プラグインの操作を行う際に、確認のためのメッセー ジボックスが表示される場合があります。 これがわずらわしい、という場合は、チェックを入れて下さい。 ・結果表示のメッセージボックスを表示しない コンテキストメニューから本プラグインの操作を行った後で、結果表示のためのメッ セージボックスが表示される場合があります。 これがわずらわしい、という場合は、チェックを入れて下さい。 ※ただし、エラー時はこの指定に関係なくメッセージボックス表示します。 ・spam と判定されたメールの処置 受信時の判定・処置、コンテキストメニューからのメールの spam としての学習と 処置、受信済みのメールの判定と処置で、spam と判定されたメールの処理方法を指 定します。 * ごみ箱へ: 各メールボックスのごみ箱に移動します。 コンテキストメニューから処理を行った場合、clean と判定されたメールはフィ ルタリングマネージャによって再振り分けされますので、ご注意下さい。 * 移動しない: spam と判定されたメールに対しては何もしません。 コンテキストメニューから処理を行った場合、clean と判定されたメールはフィ ルタリングマネージャによって再振り分けされますので、ご注意下さい。 * 指定フォルダへ: 指定したフォルダに移動します。 コンテキストメニューから処理を行った場合、clean と判定されたメールはフィ ルタリングマネージャによって再振り分けされますので、ご注意下さい。 各メールボックスの同じ位置のフォルダに移動する: 現時点の本プラグインの設定方法では、移動先フォルダを 1 つしか設定できな いため、複数のメールボックスを利用している場合で、各メールボックス毎に移 動するフォルダを指定したいときに、(手抜きで)何とか対応しようとしたもので す。 各メールボックスの設定されたフォルダと同じ相対位置にあるフォルダに移動 します。 本来はメールボックス毎にフォルダを設定できれば良いのですが、実装がめん どうで、手を抜きました。すみません。。。 * ヘッダを付加: 指定したヘッダ情報を付加します。 ヘッダに設定した値の頭に X- を追加した文字列が、実際のヘッダフィールド 名となります。 ※デフォルトでは、BkBsfilWrapper が指定されており、実際のヘッダフィール ド名は X-BkBsfilWrapper になります。 なお、このオプションを指定した場合、ヘッダの付加の有無にかかわらずメー ルの処理を Becky! のフィルタリングマネージャにゆだねます。 コンテキストメニューから処理を行った場合、spam と判定されたメールも clean と判定されたメールも、すべてフィルタリングマネージャによって再振 り分けされますので、ご注意下さい。 ・spam と判定されたメールは既読にする 受信時の判定・処置、コンテキストメニューからのメールの spam としての学習と 処置、受信済みのメールの判定と処置で、spam と判定されたメールを既読にしま す。 ・送信時に送信先をホワイトリストに追加する メール送信の際に送信先のメールアドレスをホワイトリストに追加します。 できるだけ自身のメールアドレスは登録しないようにしてありますが、処理が完全 ではありません。 新規にメールボックスを作成し、かつ、そのメールボックス宛にメールを送る際は メールボックスのプロパティで [基本設定] - [個人情報] - [メールアドレス] の 設定完了後、一旦 Becky! を再起動していただければ、プラグイン側でも、新しく 追加したメールボックスのメールアドレスを自身のメールアドレスとして認識でき ます。 ・判定時およびメール学習時に clean なメールの spam ヘッダを除かない デフォルトの動作では、コンテキストメニューからの受信済みのメールの判定と処 置で clean と判定された場合、および、学習のうち [--add-clean + --update] ま たは [--sub-spam + --update] の操作を行った場合、メールに spam を表すヘッダ があれば取り除きます。 この動作を止めたい場合は、チェックを入れて下さい。 なお、プラグイン設定の [動作設定] - [spam と判定されたメールの処置] を [ヘッダを付加] にしている場合に、この動作を止めると、過去に受信したメールに spam を表すヘッダが付加されていて、かつ、フィルタリングマネージャによって spam を表すヘッダを参照して振り分けるようにしていた場合、再判定でメールが clean になった時でも、spam と同じ再振り分けがなされますので、ご注意下さい。 ・判定時およびメール学習時に spam なメールをホワイトリストから除く コンテキストメニューからの [メールを spam 処置]、[メールを判定・処置] で spam と判定された場合、[--add-spam + --update]、[--sub-clean + --update] を 行った場合に、メールの From に書かれているメールアドレスおよびメールアドレ スのドメイン部分をホワイトリストから削除します。 ・編集 bsfilter の設定ファイルをメモ帳で開きます。 なお、コントロールキーを押しながらクリックした場合は 拡張子に関連付けられたアプリケーションで開きます。 ・bsfilter データベースをリストア bsfilter データベースおよび bsfilter の設定ファイルをファイルからリストアし ます。 ・bsfilter データベースをバックアップ bsfilter データベースおよび bsfilter の設定ファイルをファイルにバックアップ します。 o [その他の設定] ・コンテキストメニューの位置 右クリックで表示されるコンテキストメニューに [bsfilter (BkBsfilWrapper)] を 表示する位置を指定します。 ※設定を反映するには Becky! を再起動する必要があります。 ※他のプラグイン等との関係で指定通りにならない場合があります。 * メニューの一番上へ コンテキストメニューの一番上に挿入します。 * メニューの一番下へ コンテキストメニューの一番下に挿入します。 * 指定位置へ メニューの一番上を 0 として、セパレーターも含めて数えた位置を指定してくだ さい。 * 上側にセパレーターを入れる セパレーターを挿入した後に、メニューを挿入します。 * 下側にセパレーターを入れる メニューを挿入した後に、セパレーターを挿入します。 ・bsfilter スクリプトでの実行 bsfilter.exe ではなく Ruby スクリプト版の bsfilter を利用したい場合に設定します。 [bsfilter スクリプトを利用する] にチェックを入れた上で、 [ruby.exe のパス] に別途インストールした Ruby の ruby.exe のパスをフルパスで 指定してください。 o [ホワイトリスト] ホワイトリストの編集を行います。 ・アドレス一覧 現在、ホワイトリストに設定されているメールアドレスおよびドメインの一覧です。 ・アドレス、備考 一覧に、追加・更新する際の編集ボックスです。 ・追加 編集ボックスに入力した内容をアドレス一覧に追加します。 ・更新 編集ボックスに入力した内容でアドレス一覧を更新します。 ※更新はアドレス一覧で選択されているものに対して行うわけではなく、アドレス 一覧中の同じアドレスを持つ情報を更新します。 ※編集ボックスへ一覧の内容を設定したいときは、一覧の内容をダブルクリックし て下さい。 ・削除 アドレス一覧で選択されている情報を削除します。 ・インポート アドレス一覧の内容を入力ファイルの内容で置換します。 ※ファイルを指定するダイアログが表示されますので、入力ファイルを指定してく ださい。 インポート・エクスポートするファイルは、1 行に 1 情報ずつ記述し、そのフォーマッ トは、 メールアドレス備考 または ドメイン備考 です。入力ファイルの場合、備考は省略できます。また、備考が無い場合、 も省略できます。 インポートの際はメールアドレスまたはドメイン、備考の前後のスペース類は取り 除きます。 フォーマット例) hogehoge@foo.com備考 foo.bar@bighoge.co.jpテスト備考 abc@doredake.ne.jp you.com会社のドメイン ※ はタブ記号(0x09)を表します。 ・エクスポート アドレス一覧の内容をファイルに出力します。 ※ファイルを指定するダイアログが表示されますので、出力先ファイルを指定して ください。 ===== ホワイトリストについて ===== ホワイトリストの情報は [Becky! のデータフォルダ\PlugIns\BkBsfilWrapper\] の下 に、ファイル名 WhiteList.txt としてテキスト形式で保存されます。 読み込んだホワイトリストは、メール受信時の spam 判定前に照合し、From のメー ルアドレスまたはドメインがホワイトリストに存在すれば、spam 判定を行わず、その まま通します。 照合は、大文字・小文字を区別して行いますので、ご注意下さい。 なお、ホワイトリストはメール受信時のみチェックしており、コンテキストメニュー からの受信済みのメールの判定と処置ではチェックしていません。 !!!!! 重要 !!!!! ホワイトリストに自身のメールアドレスまたはドメインを記述しないでください。 spam メールの中には From に To と同じアドレスを設定したものがよくあるため、自 身のメールアドレスまたはドメインをホワイトリストに登録してしまうと、これらの メールに対して spam の判定が行われなくなってしまいます。 o [NGワード] NG ワードの編集を行います。 ・NGワードを使用する チェックを入れると NG ワードを使用するようになります。 ※処理がかなり重くなります。ご使用の際はご留意ください。 ※エンコードの関係でうまくマッチしない場合がありますこと、ご了承ください。 ・NGワードの編集 [対象] に [両方]、[件名]、[差出人] のいずれかを選び、[NGワード] を指定してください。 正規表現を使いたい場合は、[正規表現] にチェックをいれてください。 英大小文字を区別したい場合は、[英大小文字を区別] にチェックをいれてください。 入力した NG ワードをテストするには、[マッチングのテスト] の [テスト文字列] に 適当な文字列を入れ、[テスト] を押してください。 ・追加、更新、削除で一覧を操作します。 ・インポート、エクスポートで NG ワードの一覧をインポート、エクスポートできます。 o [OKワード] OK ワードの編集を行います。 ・OKワードを使用する チェックを入れると OK ワードを使用するようになります。 ※処理がかなり重くなります。ご使用の際はご留意ください。 ※エンコードの関係でうまくマッチしない場合がありますこと、ご了承ください。 ※OK ワードに合致したメールは spam チェックされませんので(ホワイトリストと同じ)、 ご注意下さい。 ・OKワードの編集 [対象] に [両方]、[件名]、[差出人] のいずれかを選び、[OKワード] を指定してください。 正規表現を使いたい場合は、[正規表現] にチェックをいれてください。 英大小文字を区別したい場合は、[英大小文字を区別] にチェックをいれてください。 入力した OK ワードをテストするには、[マッチングのテスト] の [テスト文字列] に 適当な文字列を入れ、[テスト] を押してください。 ・追加、更新、削除で一覧を操作します。 ・インポート、エクスポートで OK ワードの一覧をインポート、エクスポートできます。 //----------------------------------------------------------------------------- // 制限事項 //----------------------------------------------------------------------------- o bsfilter の設定ファイルには bsfilter のオプションを設定できますが、本プラグイ ンの仕組み上、以下のオプションを指定した場合、本プラグインの動作がおかしくな るため、指定しないようにお願いいたします。 ・pipe などの標準出力にメールの内容を出力するオプション ・help などコマンドと関係ないオプション ・pop や imap など bsfilter が単体で動作するためのオプション spam の判定は、bsfilter からの返り値に頼っています。 0 なら spam、1 なら clean と判定します。 pipe などのオプションを指定した場合、返り値が想定しているものと違い、clean な メールまで spam と判定してしまう可能性があります。 さらには、メニューから行う判定処理では、結果表示のメッセージボックスに bsfilter の標準出力の内容を出力するため、メッセージボックスに表示しきれない可 能性があります。 ※メッセージボックスに文字数の上限があるのかは寡聞にして知らないのですが、も しあるとすれば、上限に引っかかって動作がおかしくなるかもしれません。 help や revision などのコマンドと関係ないオプションを指定した場合も、返り値が 想定しているものと違い、clean なメールまで spam と判定されてしまう可能性があ ります。 pop や imap などのオプションは bsfilter が単体で動作するためのものなので、指 定した場合、応答が返ってこなくなり、Becky! を巻き添えにして固まってしまう可能 性が大です。 仮に応答が返ってきたにしろ、返り値が想定しているものと違い、clean なメールま で spam と判定されてしまう可能性があります。 また、 insert-probability insert-revision などの pipe と併用するオプションを指定しても、標準出力で得られた内容をメール に書き戻していないため、効果がありません。 o bsfilter(スクリプト版) を利用する際に、bsfilter スクリプトと実行する Ruby の バージョンが違っておりスクリプトエラーになった場合など、正しく動作しません。 また、Becky! ごと固まる場合があります。 実装を手抜きしているせいなので、ゴメンナサイなのですが、 正しく指定くださるよう、お願いいたします。 //----------------------------------------------------------------------------- // 動作概要 //----------------------------------------------------------------------------- o Becky! の起動時に Becky! のデータフォルダ下に以下のフォルダを作成します。 PlugIns\BkBsfilWrapper PlugIns\BkBsfilWrapper\bsfilterdb また、bsfilter の設定ファイルとして PlugIns\BkBsfilWrapper\ 下に bsfilter.conf を作成します。 ※作成する bsfilter.conf の中身は空ですが、1 行だけ ## bsfilter.conf としてコメントを入れてあります。 その後、bsfilter.exe にオプション --show-db-status を指定して起動し、bsfilter が利用できるか確認します。 なお、起動時には必ず --show-db-status を指定して bsfilter を起動し、利用でき るか確認していますが、この動作を止めるには、プラグイン設定の [動作設定] - [起動時に bsfilter データベースを参照しない] にチェックを入れて下さい。 o 本プラグインの設定を保存した場合、 Becky! のデータフォルダ\PlugIns\BkBsfilWrapper 下に設定ファイル BkBsfilWrapper.ini が作成されます。 また、ホワイトリストの内容は、データフォルダ\PlugIns\BkBsfilWrapper 下に WhiteList.txt として作成されます。 また、ホワイトリスト、NG ワード一覧のソート状態などは、 Becky! のデータフォルダ\PlugIns\BkBsfilWrapper 下に設定ファイル BkBsfilWrapperEnv.ini として保存されます。 ディレクトリ構成とファイルの配置は以下のようになります。 [Becky! のデータフォルダ\PlugIns\BkBsfilWrapper\] bsfilter.conf - bsfilter の設定ファイル BkBsfilWrapper.ini - BkBsfilWrapper の設定ファイル BkBsfilWrapperEnv.ini - BkBsfilWrapper の設定ファイル(環境用) WhiteList.txt - ホワイトリスト NgWordList.txt - NG ワード一覧 OkWordList.txt - OK ワード一覧 BkBsfilWrapper.log - BkBsfilWrapper のログファイル BkBsfilWrapper.1.log - 〃 BkBsfilWrapper.2.log - 〃 BkBsfilWrapper.3.log - 〃 [Becky! のデータフォルダ\PlugIns\BkBsfilWrapper\bsfilterdb\] C.clean.sdbm.dir - bsfilter のデータベース ・・・ - 〃 ja.spam.sdbm.pag - 〃 o bsfilter 起動時のオプションとして必ず以下の値を指定しています。 --homedir には、 Becky! のデータフォルダ\PlugIns\BkBsfilWrapper\bsfilterdb\ --config-file には、 Becky! のデータフォルダ\PlugIns\BkBsfilWrapper\bsfilter.conf 判定/学習時には、メールデータを bsfilter の標準入力に流し込んでいます。 また、bsfilter の標準出力を受け取り、結果表示のメッセージボックスに表示する場 合があります。 なお、spam の判定は bsfilter の返り値に頼っています。 0 なら spam、1 なら clean と判定します。 o ログファイルは [Becky! のデータフォルダ\PlugIns\BkBsfilWrapper\] 下に出力され ます。3 世代前まで残し、 BkBsfilWrapper.log - 最新 ↓ BkBsfilWrapper.1.log - 1 世代前 ↓ BkBsfilWrapper.2.log - 2 世代前 ↓ BkBsfilWrapper.3.log - 3 世代前 の順にローテーションしていきます。3 世代前より古いログは捨てられます。 ※ログはエラーが起こった場合のみログファイルに出力されます。 //----------------------------------------------------------------------------- // アンインストール //----------------------------------------------------------------------------- ※本プラグインのアンインストールは、Becky! を終了した状態で行って下さい。 o Becky! のプラグインフォルダ(\Program Files\RimArts\B2\PlugIns\ 等)下の BkBsfilWrapper.dll を削除する。 [\Program Files\RimArts\B2\PlugIns\] BkBsfilWrapper.dll ← このファイルを削除する o Becky! のプラグインフォルダ下の BkBsfilWrapper フォルダを削除する。 [\Program Files\RimArts\B2\PlugIns\] [BkBsfilWrapper] ← このフォルダのみ削除する o Becky! のデータフォルダ下の PlugIns フォルダの下にある BkBsfilWrapper フォル ダを削除する。 [Becky! のデータフォルダ] [PlugIns] [BkBsfilWrapper] ← このフォルダのみ削除する ※重要 Becky! のデータフォルダ下の PlugIns フォルダは削除しないでください。他のプ ラグインが PlugIns フォルダ下にファイル等を作成している場合があるからです。 [Becky! のデータフォルダ] [PlugIns] ← 削除しないでください [BkBsfilWrapper] ← 本プラグイン [HogeHoge] ← 他のプラグイン(削除しないでください) ・・・ //----------------------------------------------------------------------------- // 謝辞 //----------------------------------------------------------------------------- o 以下の文献、プログラム、リソースを利用させていただきました(順不同)。 有益な情報をご提供いただき深謝いたします。 ※URL は 2011/06 時点のものです。 ・bsfilter プロジェクト(NABEYA Kenichi 様) http://sourceforge.jp/projects/bsfilter/ 日本語完全対応の学習型ベイジアン・スパム・フィルタ ・Tietew 様 http://www.tietew.jp/ Beckrb - Becky で Ruby スクリプトを走らせることができるプラグイン ・KaoriYa.net(MURAOKA Taro (KoRoN) 様) http://www.kaoriya.net/ Libiconv DLL 1.9.1 for Windows (713KB = 730504) 02-Dec-2003 ・Uemura's B2 PlugIn の紹介(上村亮 様) http://www1.kcn.ne.jp/~ufbmf001/b2pin.html B2 Pluginインストーラ ・ひしだま's ホームページ 様 http://www.ne.jp/asahi/hishidama/home/ Beckyプラグインの作成方法 ・Becky! Ver.2 Plug-in Forum 様 http://www.b8p.net/b2pin/ Becky! Ver.2 Plug-in SDK Help - HTMLヘルプ版 (2001年3月13日) ・THE CODE PROJECT(ljw1004 様) http://www.codeproject.com/ Zip Utils - clean, elegant, simple, C++/Win32 - http://www.codeproject.com/KB/files/zip_utils.aspx ・famfamfam.com(Mark James 様) http://www.famfamfam.com/ SILK ICONS - http://www.famfamfam.com/lab/icons/silk/ ・BkASPil for Becky!2 総合案内(BNR32 様,松永香澄 様,高崎真哉 様) http://b2antispam.s33.xrea.com/ スパム対策・対処用プラグイン(BkASPil for Becky!2) ・しののんだいあり~(しののん様) http://www.shinonon.dyndns.org/diary/ bkbsfilter (bsfilter on beckrb) ・libiconv http://www.gnu.org/software/libiconv/ ・有限会社リムアーツ 様 http://www.rimarts.co.jp/ PlugInSDK.txt - Becky! Plug-In SDK BkPGP - Becky! PGP Plug-In //----------------------------------------------------------------------------- // その他 //----------------------------------------------------------------------------- o 汚いソースですが、煮るなり、焼くなり、お好きにして下さい。 ご連絡は不要です。もちろん、プログラムコードの責任は持てませんので、 あしからず、ご容赦下さい。。。m(_*_)m o Becky! Plug-In SDK は、B2PinSDK-25000.zip を使用しました。 また、SDK のソースは手を加えずそのまま使用しています。 o ディレクトリは以下の構成で開発しました。 BkBsfilWrapper.project PlugInSDK - Becky! Plug-in SDK を格納 BkBsfilWrapper - 本プラグインのプロジェクトを格納 最新版の SDK を使いたい場合、有限会社リムアーツ 様のサイト (http://www.rimarts.co.jp/) で配布されていますので、ダウンロードして PlugInSDK 下に配置し、ビルドして下さい。 ただし、作成に使用した SDK 以外のバージョンでビルドできるかは不明です。 o プロジェクトは Visual Studio 2010 (C++) でビルドしました。 //----------------------------------------------------------------------------- // 履歴 //----------------------------------------------------------------------------- o 0.0.0.51 - 2015/08/28 ・Windows 10 での動作確認。バージョンはそのまま NOTE.txt のみ変更。 o 0.0.0.51 - 2015/04/20 ・OK ワード、NG ワードの差出人登録時、メールアドレスも含めた差出人を登録する ように変更した。 ※それまではメールアドレスを除いた差出人を登録していた。 ・bsfilter データベースのバックアップとリストア後のメッセージでバックアップ先 およびリストア元のファイル名も表示するようにした。 ・ホワイトリスト、OK ワード、NG ワード のインポート時にデフォルトのファイル名 を表示するようにした。 o 0.0.0.50 - 2015/03/11 ・Debug オプション(隠してある)を有効にして、へんてこなメール(ほとんど改行 だけで 2 MB もあるような)などをチェック・判定したりすると、メールの内容を ログに出力しようとして、あまりに処理に時間がかかりすぎ、固まってしまうため、 ログにメールの内容を出力するのをやめた。 o 0.0.0.49 - 2015/01/05 ・ワードリスト対象かのチェックで差出人からメールアドレスが抜けていたので 含めるように変更。 ・ワードリストの文言で「すべて」を「両方」に変更。 o 0.0.0.48 - 2014/10/04 ・環境周りの設定の一部で排他処理用の設定が抜けていたのを修正した。 ・ワードリストのエクスポートの部分を変更した。 ・コメントの修正。 o 0.0.0.47 - 2014/10/03 ・OK ワードが利用できるようにした。 OKワードを利用するにチェックが入れられた場合、 受信時に spam チェックの前に OK ワードのチェックを行う。 ※OK ワードに合致したメールは spam チェックされませんので(ホワイトリストと同じ)、 ご注意下さい。 o 0.0.0.46 - 2014/10/02 ・ループの共通化。機能追加は無し。 o 0.0.0.45 - 2014/10/01 ・NG ワードが利用できるようにした。 NGワードを利用するにチェックが入れられ、かつ、受信時に spam 判定で非spam となった場合のみ、NG ワードのチェックを行う。 o 0.0.0.44 - 2014/09/21 ・ダイアログで ruby.exe のパスを入力された時のチェックを修正。 ・NOTE.txt を手直し。 ・ホワイトリストのインポート・エクスポート後に完了メッセージを表示。 o 0.0.0.43 - 2014/09/20 ・bsfilter スクリプトを利用できるようにした。 テストをきちんとしていないので、バグがある可能性があります。ごめんなさい。 o 0.0.0.42 - 2013/03/14 ・bsfilter.exe を実行し、出力した内容を取得する際の WaitForSingleObject() の タイムアウト時間を 100 から 1000 (ミリ秒)に変更。 ※実質的には全然変化なし。 o 0.0.0.41 - 2013/03/10 ・Windows 8 での動作確認。バージョンはそのまま NOTE.txt のみ変更。 o 0.0.0.41 - 2013/02/25 ・メールを spam 処置した場合などに、該当のメールアドレスとドメインをホワイト リストから削除できるようにした。 o 0.0.0.40 - 2013/02/23 ・[動作設定] - [bsfilter について] の [編集] ボタンを押した場合に、関連付けを 使って設定ファイルを開くのを、コントロールキーが押されていない場合ではなく、 コントロールキーが押されている場合に変更した。また、関連付けは .txt のみと し、.conf への関連付けは使用しないようにした。 ・メールを選択してのホワイトリスト削除機能を付けた。 ・[動作設定] - [spam と判定されたメールの処置] のヘッダ情報と文字列は、「ヘッ ダを付加」の指定有無にかかわらず常に編集できるようにした。 o 0.0.0.39 - 2012/12/29 ・進捗を示すダイアログのプログレスバーが Windows 7 などで表示に遅延が起こるの に対し、表示完了を待つため、約 0.5 秒のウェイトを入れてあったのを除き、目標 ステップの 1 つ先の値を設定し、すぐに目標の値に設定し直す、という方法に変更 した。 o 0.0.0.38 - 2012/02/18 ・進捗を示すダイアログのプログレスバーの処理をスレッド化した。 なんか変だけど、とりあえず…。 o 0.0.0.37 - 2012/02/15 ・Windows 7 などでスパム処理時の進捗を示すダイアログのプログレスバーがうまく 動作しないので、回避策を入れた。 もしかして、プログレスバーの使い方間違ってる…?。 o 0.0.0.36 - 2011/09/19 ・コンテキストメニューの位置を指定できるようにした。 o 0.0.0.35 - 2011/09/08 ・ご報告いただいた異常の調査と対策を施した(つもり)。 ただ、私の技術不足によりご報告いただいた状態での異常終了を再現できず、これ で大丈夫か?、といわれるとはなはだ心許ないのですが…。 ・とりあえず色々な箇所に初期値を設定した(脅迫観念的ではありますが…)。 o 0.0.0.34 - 2011/09/06 ・BKC_OnBeforeFilter2() で引数 lppParam の参照先が NULL の場合に、 LOGGING_DEBUG() で異常終了することを山下 陽平 様よりご報告いただきました。 とりあえず、LOGGING_DEBUG() をコメントアウトした版をアップしておき、詳細を 調査することにしました。 山下 陽平 様、詳細な調査と発生箇所まで特定いただき、本当にありがとうござい ます。貴重なお時間を割いていただき、深く感謝いたします。 o 0.0.0.33 - 2011/08/28 ・CProgressDlg::SetStep() で処理後にも DoEvents() を入れてみた。 でも、あんまり表示変わらない…。 o 0.0.0.32 - 2011/07/06 ・進捗表示のところのコードを少し直した。 ・進捗表示時に [ESC] キー押下でもキャンセルされるようにした。 o 0.0.0.31 - 2011/07/03 ・進捗表示をつけた。 o 0.0.0.30 - 2011/06/23 ・bsfilter データベースのリストアができるようにした。 ・ホワイトリストをソートできるようにし、ソートの状態を保存しておくようにした。 o 0.0.0.29 - 2011/06/02 - [spam と判定されたメールの処置] が、[ごみ箱]、[移動しない]、[指定フォルダへ] の場合に、clean と判定されたメールについては振り分けを行うようにした。 - 自身のメールアドレスを保持している箇所を std::map から std::set に変更した。 - ホワイトリストをドメイン対応にした。 o 0.0.0.28 - 2011/05/31 - 初期化の際に Becky! のバージョンをチェックし、バージョンが満たない場合、プ ラグインがロードされないようにした。 o 0.0.0.27 - 2011/05/24 - その他の謝辞に libiconv を追加。 o 0.0.0.26 - 2011/05/12 - リソース ID を整理した。 - 文字列をリソース化した。 - 外部リソースを使えるようにした。 o 0.0.0.25 - 2011/05/10 - 設定ダイアログを中央に表示するためにフックを使っていたのを止め、 WM_INITDIALOG で中央に表示するようにした。 - [spam と判定されたメールの処置] の [指定フォルダへ] のフォルダ選択ダイアロ グを中央に表示するためにフックを使っていたのを止め、WM_INITDIALOG で中央に 表示するようにした。 o 0.0.0.24 - 2011/05/08 - 設定ダイアログ表示時の排他制御の関係の処理が離れていたのでわかりにくく少し いじった。動作は同じ(はず ^^;)。 - [送信時に送信先をホワイトリストに追加する] がチェックされていた場合に、対象 を "To" のみにしていたが、"Cc"、"Bcc" も対象にした。 o 0.0.0.23 - 2011/05/06 - [spam と判定されたメールの処置] の [指定フォルダへ] でのフォルダ選択ダイア ログを SHBrowseForFolder() を使う方式から自前のダイアログに変更し、フォルダ 名をファイルシステムの名前のままとせず、Becky! の表示フォルダ名で表示するよ うにした。 - [指定フォルダへ] でのフォルダ選択ダイアログが自前になったことにより、カレン トのメールフォルダのみツリー表示していたのを、全体のメールフォルダをツリー 表示するようにした。 - [bsfilter データベースをバックアップ] したときに zip ファイル中のファイルの 時間が UTC だったのをローカル時間に変更した。 ※UTC だったのはもしかしたら仕様かもしれないが、個人的にはローカル時間の方 が助かるので。。。 - ダイアログを中央に表示させるためのフックルーチンが全く同じのが 2 つになった (作り方が悪いのですが…)のでマクロ化した。 o 0.0.0.22 - 2011/04/27 ・Becky! 側のフィルタリング設定で振り分けできるよう、ヘッダを付加しフィルタリ ングマネージャにゆだねるオプションを追加した。 ・ヘッダを付加する処理に関わるあちこちを変更した。 ・送信時にホワイトリストへ追加する際に既存のメールアドレスがある場合は上書き しないようにしていたが、もし、備考欄が空だったら上書きするようにした。 ・ゴミ箱へ送る際に lppParam にフォルダ ID をリテラル文字列で指定していたが、 Becky! API の Alloc() で得られたバッファに文字列を設定し渡すようにした。 ・動作設定画面で [編集] をクリックして bsfilter.conf を開く際、コントロールキー が押されている時は、メモ帳を使うようにした。 ・NOTE.txt を見直し、一部書き直し。 o 0.0.0.21 - 2010/11/06 ・bsfilter データベースおよびホワイトリストの保存時にデフォルトでファイル名が 表示されるようにした。 o 0.0.0.20 ・bsfilter データベースのバックアップができるようにした。 o 0.0.0.19 ・ホワイトリストの保存が競合するかもしれないのを直した。 o 0.0.0.18 ・設定を保存できないという、致命的なバグを修正した (+_+;)。 すみません。。。 o 0.0.0.17 ・デバッグ用に出力しているヘッダ文字列をデコードしてから出力するようにした。 o 0.0.0.16 ・送信時にホワイトリストに追加する際、自身のメールアドレスの情報を取得し直し ていたが、実際には意味が無いので(リアルタイムに反映される情報ではないので、 更新しても変化が無い)、止めた。 ・メニューからホワイトリストに追加する際、自身のメールアドレスを追加しないよ う気休めのコードを追加した。 ・メニューおよび送信時にホワイトリストに追加する際、名前を備考に設定するよう にした。 o 0.0.0.15 ・設定ダイアログを中央に表示するために使用しているフック処理で、 SetWindowsHookEx() の引数が間違っていたのを修正した。 o 0.0.0.14 ・Trim() のコードが MBCS を意識していないのに、MBCS を引数として渡していたの を修正した。 o 0.0.0.13 ・送信時に送信先をホワイトリストに追加する際に自身のメールアドレスを追加しな いよう、さらなる気休めのコードを追加した。 ・ロケールの設定があちこちにちらばっていたので、初期化処理で行うようにした。 ※dll 内でランタイムのロケールを設定した場合に、ランタイムを共有する他の dll やアプリケーション本体にどう影響するかはきちんと調べていないが、今の ところ、本プラグインはビルドを /ML で行っているため、他への影響は無いはず。 ・プラグインの設定を読み込む処理で、文字列は必ず Trim() するようにし、関係す るコードで、いちいち Trim() していたのをのぞいた。 ※ちなみに、関係するコードの Trim() の使い方が間違っていた。。。 o 0.0.0.12 ・送信時に送信先をホワイトリストに追加する際に自身のメールアドレスを追加しな いよう、気休めのコードを追加した。 o 0.0.0.11 ・送信時に送信先をホワイトリストに追加する機能を追加した。 o 0.0.0.10 ・Util::GetHeaderItem() がヘッダの先頭にある違う項目を取得してしまうのを直し た。この関数まだ怪しい。。。(+_+;)。 o 0.0.0.9 ・設定ダイアログのホワイトリストのメール一覧のタイトル部の設定のコードに余分 なものがあったので除いた。 ・一覧設定のコードの一部をマクロ化した。 ・学習処理前のメッセージボックスのタイトルに --add-spam などの文字列を表示す るように変更。 ・パス区切りと MBCS 文字の 2 バイト目を混同してしまう可能性があるのを修正。 ・その他細かい修正。 o 0.0.0.8 ・メニューの [差出人をホワイトリストに追加] がメールの選択状態に関係なく有効 になっているのを直した。 o 0.0.0.7 ・設定ダイアログから bsfilter の編集ファイルを開けるようにした。 ・設定ダイアログ上の文言などを手直しした。 o 0.0.0.6 ・ホワイトリスト的なものに UI を付けてみた。 ・UI を付けるためにプロパティシートをいじっているうちに、あっちゃこっちゃいじ るはめになり、ソースファイルの構成が変わった。 ・メニューから差出人をホワイトリストに追加できるようにした。 ・Util::GetHeaderItem() がヘッダ以降もずんずん見に行って、違うものを探してき てしまうのを直した(たぶん)。 ・設定ダイアログで、フォルダ指定のラジオボタンのチェック状態を見ずに、フォル ダ指定用のテキストボックス等の有効・無効を設定していたのを直した。 o 0.0.0.5 ・処理時にウェイトカーソルを表示するようにした。 ・ホワイトリスト的なものをとりあえず実装してみた。でも UI が無い。 o 0.0.0.4 ・NOTE.txt の「使い方」を「インストール」と「使い方」に分けた。 ・NOTE.txt に「アンインストール」を追加した。 ・spam と判定されたメールを既読にするオプションをつけた。 ・設定情報に排他制御を設けた(ちとコードが怪しい)。 ※本当に必要だったかはよくわからない。ただ、受信時に設定情報を更新する場合 は、排他が必要な気がしたので。 ・spam として処置を複数対応にした。 o 0.0.0.3 ・Visual Stduio 2010 でもビルドできるようにした。 ソースは変更していないが、まぎらわしいのでバージョンを上げた。 o 0.0.0.2 ・メニューがわかりにくいと感じたので、--add-spam 等の後に --update を追加した。 o 0.0.0.1 ・最初のバージョン。