正月ボケの解消と実益のため、迷惑(スパム)メール対策をすることにしました。
迷惑(スパム)メール対策としては、一般的にはメーラーのSpamフィルタ等を活用するのでしょうが、僕が使っているOutlook2016ではその機能を見つけられない(または見つかったとしても非常にしょぼい)ようなので、僕はサーバに入っている«SpamAssassin»というソフトを利用しています。
以下、 SpamAssassin の紹介と、今回自作した«SpamAssassin に迷惑メールを学習させるためのシェルスクリプト»の紹介です。
この記事の目次
SpamAssassin の紹介
そもそも迷惑メールのことをスパムメール(spam mail)と言ったりします。
SpamAssassin とは spam mail を assassin(暗殺)するソフトっていう意味で、要は迷惑メール対策のためのソフトです。
ソフトと言ってもPCやスマホにインストールするわけではなく、お使いのプロバイダやレンタルサーバに組み込まれているソフトです。
僕が利用している«さくらのレンタルサーバ»にはこの SpamAssassin が組み込まれているので、サーバのコントロールパネルから設定することで、無料で利用できます。
意外と多くのプロバイダやレンタルサーバに入っているようです。
最初は無能な暗殺者
しかしこの SpamAssassin 、そのまま設定するだけでは迷惑メールの見地率が非常に悪いのです。
最初は手動で、迷惑メールと通常のメールを学習させる必要があります。
ここから先はプロバイダやサーバによっても異なると思いますが、さくらのレンタルサーバでこの学習をさせるためには、レンタルサーバが用意したウエブメールにログインして1通ずつ操作しないといけないという、とんでもなく面倒な労力を必要とします。
そこで今回作ったのが、その学習操作をなるべく自動化&簡便に行うためのシェルスクリプトです。
スパムメール学習用シェルスクリプトについて
概要&前提条件
- サーバ状に迷惑メールを集めたメールフォルダを作成しておき、そのフォルダ内のメールを迷惑メールとして学習させることをイとしています。
また同時に、受信フォルダに残っているメールを«通常メール(SpamAssassin では spam に対して ham と言います)として学習させます»。 - 学習後の迷惑メールは自動的に削除します(ゴミ箱にも入りません)。
- サーバ上にあるすべてのメールアカウントを検索し、«spam_recipe»というフォルダがあるメールアカウントに対してのみ、動作します。
- メールフォルダの形式は Imap で動作します。Pop形式のメールフォルダはサポートしていません。
- さくらのレンタルサーバ(スタンダードプラン)で動作することを前提としています。
インストール方法
メーラーでメールフォルダを新規作成
PC やスマホでメーラーを開き、お使いのメールアカウントのフォルダの中に«spam_recipe»という名前で新規フォルダを作成します。
※後述のシェルスクリプトを書き換えることで、上記フォルダ名は変更可能です。
シェルスクリプトファイルの作成
以下のソースコードをテキストファイルにコピーし、«spam_learn.sh»という名前で保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/local/bin/bash # folder name of spam recipe spamRecipe="spam_recipe" for var in $(ls -d ~/MailBox/*) ; do target="$var/maildir/" if [ -e $target/.$spamRecipe ]; then sa-learn --spam $target/.$spamRecipe/cur rm $target/.$spamRecipe/cur/* sa-learn --ham $target/cur fi done |
※拡張子は必ず .sh にしてください。保存できない場合はいったん拡張子を .txt で保存し、アップロード後に拡張子を .sh に変更することもできます。
上記ファイルのアップロード
保存した spam_learn.sh を FTP ソフト等でサーバにアップロードします。
アップロード先は自由ですが、
1 | ~/bin |
というフォルダを作成し、その中に保存することをお勧めします。
上記ファイルに実行権限を付与
FTP ソフトや SSH のターミナルソフトで、上記ファイルに実行権限を付与します。
付与の方法は省略しますが、 705 で問題ありません。
Cron の設定
SSH ターミナルソフトやサーバのコントロールパネルから、 cron の設定を行います。
さくらのレンタルサーバでは、コントロールパネルから cron の設定が可能です。
これにより、上記で保存した
1 | ~/bin/spam_learn.sh |
を、自動で定期的に動作させます。
比較的処理が重い処理なので、1日1~3回がいいと覆います。
動作の解説
わかる人がみればしょぼいことをしてるのがまるわかりですが、このシェルスクリプトが何をしているのかを、簡単に解説しておきます。
- 1行目……このシェルスクリプトを動かすのに必要な«bash»というプログラムの所在地を表しています。お使いのサーバによって多少異なるはずなので、適宜書き換えてください。
- 4行目……最初にメーラーで作ったフォルダの名前です。デフォルトでは«spam_recipe»としています。特段の事情がない限り、書き換える必要はありません。
- 6行目……ls コマンドでの中にあるフォルダを洗い出し、 for コマンドで一つずつ変数 var に代入し、以後の操作を繰り返します。1~/MailBox
- 8行目……各メールフォルダにspam_recipeというフォルダがあるかをチェックし、あれば9~11行目の操作を行います。
- 9~11行目……9行目で迷惑メールの学習を、10行目で spam_recipe フォルダの中身を消去、11行目で通常(ham)メールの学習を行っています。
著作権と注意事項
- しょぼいプログラムですが、本シェルスクリプトの著作権は作者である私、松村が保持します。
- 本シェルスクリプトを利用した結果について、作者は一切の保証や責任を負いません。利用についてはあくまで自己責任でお願いします。
- 不具合等の報告は本記事のコメント欄にお願いします。作者がわかる範囲での対応は試みます。
特に迷惑メールを削除する方法については、この方法では極めて怪しいのではないかと危惧しています。