初めに
最近のメールは、中身だけ見てもスパムかどうかわからない
ぐらい、精巧にできてます。
一方、各プロバイダでは対応ができていることも多いです。
例えば、私はメールはOCNなのですが、OCNは”X-OCN-SPAM-CHECK”ヘッダにスパムメールであれば100.00%と付与してきます。
メールクライアントは、Thunderbirdを使っているので、”X-OCN-SPAM-CHECK”ヘッダをみて、スパムメールであれば、迷惑メールマークを自動で付与するプラグインを作って見ようと思いました。
で、どう作るんだっけ?
そして作ろうと思っては見たもの、よく分かってませんでした。
調べたところ、とりあえずは形になりそうなので、Thunderbird プラグインの作り方をまとめておこうと思います。
ThunderbirdのプラグインはWebExtensionsに変わってる
昔は、ThunderbirdはXUL技術を使用したプラグインでしたが、
近年はWebExtensions
APIを使用したプラグインに変っているようです。
googleで検索してしまうと、昔の情報が引っかかってきますが、
昔そうだったんだなぁ、、という程度にした方がいいと思います。
Thunderbirdのプラグインの作り方
では、実際にプラグインを開発する手前までの環境を作ってみようと思います。以下を行います。
- (1) ツールインストール
- (2) 開発環境構築
- (3) プラグイン構成の構築
(1) ツールインストール
以下をインストールします。Thunderbirdは既に入ってるかもしれませんが、
バージョンを78以降にした方がいいと思います。
- Thunderbird 78以降
- nodejs v14.15.5
- https://nodejs.org/ja/ からその時点の最新版をインストール
- npm 6.14.11
- VSCode
- Power Shell v7
https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/what-s-new-in-powershell-70?view=powershell-7.1
nodejsは直接的には使いませんが、ビルド(zipにまとめるだけ)に使えます。
以下でビルド用ツールをインストールしておきます。
> npm install -g web-ext
Linuxと違い、Windowsのシェルは壊滅的に使えないので、Power Shellに入れ替えます。
VSCodeはJavaScriptのコードを書くのに使用します。
ただし、補完が嘘(WebExtensionsの仕様に沿ってない)のであまり意味はないかもしれません。
ツールはこれだけで問題ありません。コンパイラとかも不要です。
(2) 開発環境構築
ここのように別プロファイルを生成します。
自分の環境に影響がないようにするためです。一応しておいた方がいいかと思います。
以下でThunderbirdを起動ます。
thunderbird -ProfileManager
以下のように開発プロファイル(PluginTest)を作成しておきます。開発プロファイル名は何でも構いません。
以下のようなショートカットを「Thunderbird 開発用」として作っておくと便利です。
"D:\Program Files\Mozilla Thunderbird\thunderbird.exe" -no-remote -P PluginTest
(3) プラグイン構成の構築
ここから実際のプラグインを開発していきます。プラグインの中心はmanifest.json
です。
逆に言うとこれだけで、後はJavaScriptを追加していけば作れます。
ディレクトリ構成
昔は、install.rdfとかが必要だったようですが、WebExtensions APIの場合は不要です。それらはすべてmanifest.jsonに記述します。
以下が開発時のディレクトリ構成です。spamcheckerディレクトリの中に、プラグインを追加していきます。
spamchecker/ manifest.json background.js
manifest.json
以下がmanifest.jsonです
{ "manifest_version": 2, "applications": { "gecko": { // 適当なユニークであればローカルで起動している限り問題ない "id": "kenichi-tanino-Thunderbird-addon-ocnspam@a2.mbn.or.jp", // Thunderbirdでサポートする最低バージョンを記述します。 "strict_min_version": "78.0" } }, "name": "SPAM Check for OCN", //プラグインの名前と説明です。 "description": "SPAM Check for OCN(Japanese Internet Provider)", "version": "0.0.4", "background": { // ここが重要。ここに記述したファイル名のJavaScriptを起動します。 "scripts": ["background.js"] }, "permissions": [ //プラグインで使用する権限を記述する。 "messagesRead", "accountsRead", "accountsFolders", "storage" ], "message_display_action": { //メールの本分を表示している部分の表示 "default_icon": "icons/spam_mail.png", "default_title": "SPAM Check OCNHeader" } }
background.js
真っ当なプラグインは次回以降に作成しますが、以下では、
選択したメールだけチェックする実装だけ行いました。動作確認用にログを出しています。
//メールが選択された時。 browser.mailTabs.onSelectedMessagesChanged.addListener(async (tab, messageList) => { console.log(messageList.messages); for (let message of messageList.messages) { messagePart = await browser.messages.getFull(message.id); for (let hcontent of messagePart.headers['x-ocn-spam-check']) { console.log(hcontent); if (hcontent == '100.00%') { console.log("content is junk"); let update_message = { junk: true }; browser.messages.update(message.id, update_message); } }; } });
ビルド
上記のプラグインをビルドします。
> web-ext build --overwrite-dest -s .\spamchecker\ Building web extension from spamchecker Destination exists, overwriting: .\web-ext-artifacts\spam_check_for_ocn-0.0.4.zip Your web extension is ready: .\web-ext-artifacts\spam_check_for_ocn-0.0.4.zip
メニュー: ツール->「開発ツール」->「アドオンをデバッグ」でロードする。
以下の画面から上記のspam_check_for_ocn-0.0.4.zipをロードします。
エラーコンソールで内容を確認
では実際にメールを見てみます。
普通のメールを見た場合の、エラーコンソール(「ツール」->「開発ツール」->「エラーコンソール」)は以下になります。
スパムメールをメール表示した場合は以下の通りです。
この時にはメールに「迷惑メール」がマークされています。
終わりに
まずは、Thunderbirdのプラグインの作り方を書いてみました。昔やろうとしたのよりかなり簡単です。
今は、昔のXULによる開発とごっちゃになっていてわかりにくいですが、WebExtensions版は、整理されています。
次回は、ちゃんとしたThunderbirdプラグインの開発について記述しようと思います。permissionsとか、message_display_actionについては次回、説明します。
けど、今回のだけで、用が足りてしまった気もする。。
参考
- https://a-tak.com/blog/2020/02/popfile-jump/
- Thunderbird WebExtensions 仕様