カテゴリー
自作ソフト 雑記

ThunderbirdからPOPFileにジャンプする拡張機能作った

はじめてThunderbirdの拡張機能を作ってみました。

POPFileって知らないよね…

POPFileというのはメールクライアントとサーバーの間にプロキシとして起動してベイジアンフィルターによりメールを振り分けしてくれるソフトです。

このソフトが特徴的なのは「バケツ」と呼ばれる振り分け先を複数持てることです。それにより普通の迷惑メールフィルタのように「スパムかそうじゃないか?」の二択ではなく、「A社案件」「メルマガ」「Redmineの通知」のように複数の分類にわけることができます。

分類はPOPFileの管理画面でメールに対して、どのバケツに振り分けるかを学習させることで、以後は自動でメールの内容から振り分けを行ってくれます(ちなみに振り分け結果はメールヘッダに追加されるのでそれを元にメーラーで振り分け設定する必要がある)。

この学習がなかなか優秀で割と数件学習させるだけで、精度良く分類してくれます。

正直、かなり古いソフトで現状ほとんどメンテナンスがされておらず、いつ使えなくなるか不安なソフトではありますが、同じような機能をもつソフトがないので未だに使い続けています。

誤判定したときの学習がめんどう

なかなか精度良く判定してくれるのですが、それでも間違って分類したり、あとでバケツを増やしてもっと細かく分類したくなる時があります。

その際にPOPFileのローカルのWebサーバーで起動している管理画面で修正するのがめんどくさい。メールヘッダの中に

X-POPFile-Link: http://127.0.0.1:8080/jump_to_message?view=1

みたいな感じでURLが埋め込まれているので、これをコピーしてブラウザに貼り付けると該当のメールが表示されるので、そこから適切なバケツに再振り分けすると学習してくれるのだけど、メールのヘッダからこの行を探すのが面倒。

昔はどうやらmnenhyというアドオンでThunderbirdから簡単にPOPFileに飛べたみたいだけど、このアドオンはいまや全然動作していない。

それならそんなに難しい処理ではないし自分で作ってみようかとチャレンジしてみました。

情報が少ない

どうやら最近になってThunderbirdのアドオンはWeb Extensionという形式になったらしくFirefoxのアドオンの情報しか無くて困りました。

「Thunderbird 78」への対応がキビしい! アドオン開発者が"Kickstarter"で支援を呼びかける/「後で送信(Send Later)」など約10個のアドオンが存続の危機【やじうまの杜】

その中でもなんとか見つけた情報は以下。

まずはWebExtentionを理解しないと始まらないので、Firefoxのチュートリアルだけどやってみた。

初めての拡張機能

Thunderbird WebExtensionのリファレンス。メールの情報取得とかのAPIは当然Firefoxにはないのではここからなんとか探した。

Thunderbird WebExtension APIs - Thunderbird WebExtensions 68 documentation

UIの作り方とかThunderbird WebExtensionには何も書いてなくてとまどったが、ボタンを出すだけならばmanifest.jsonに

  "browser_action": {
    "default_icon": "icons/beasts-32.png",
    "default_title": "POPFlie Jump"
  },

  "background": {
    "scripts": ["background.js"]
  }

と書くだけでボタンが出てきたので安心した。backgroudのところで押したときに動かすJavaScriptを指定しておけばそれを読んでくれる。

ロジックはこれだけですんだ。

async function execute() {
  messages = await browser.mailTabs.getSelectedMessages()
  
  messages.messages.forEach(async (message) => {
    messagePart = await browser.messages.getFull(message.id)
    messagePart.headers['x-popfile-link'].forEach((link) => {
      browser.tabs.create({
        url: link
      })
    })
  })
}

// エントリーポイント
browser.browserAction.onClicked.addListener(execute)

mailTabs APIで選択しているメールの情報は取れるようなので、そこから芋づる式でx-popfile-linkのURLを取得して、新たなタブでPOPFileの管理画面を表示するのに成功。

デバッグは「ツール」> 「開発ツール」 > 「アドオンをデバッグ」> 「一時的なアドオンを読み込む」からソースが入っているフォルダを選ぶとよい。デバッグボタン押すとJavascriptコンソールも出せるのでConsole.logデバッグが使える。

開発したら一式zipで固めて公開。web-extツールでビルドすると楽。

npm install -g web-ext

でインストールして…

web-ext build --overwrite-dest

でビルド。overrite-destを入れておかないと2回目以降のビルドで上書してくれず古いままになるので地味なハマりポイント。

あとマニフェストに以下を入れておかないと、Thunderbirdに互換性がないと言われてインストール出来なかったり、Thunderbird公式ページにアドオン公開出来ないのもご注意を。

  "applications": {
    "gecko": {
      "id": "pop-jump@a-tak.com",
      "strict_min_version": "68.0"
    }
  },

公式ページにアドオンを公開する場合は、まずFirefoxアカウント作ってログインする。あとは自分の管理ページからさきほどビルドしたzipを上げればOK。

無事完成

そんなわけで初のThunderbirdアドオン公開しました。

githubはこちら。

Chromeの拡張も似たような感じの作り方らしいので、作り方覚えておくと役に立つかもしれませんね。

この記事を書いた人: A-tak

A-tak.com(えいたっく どっとこむ)の管理人。
Apple野郎なおっさんでしたが、ちょっと最近のAppleには飽き気味。
A-tak.comは2002年2月から運営(前身のサイトは1999年3月から)。今年で18年目!

Twitter
Mastodon
Facebook