我輩はブロガーではない。ネタもまだない

SASとかDelphiあたりの人様の役に立たないネタを提供します

思ったより簡単だったThunderbirdのAdd-on開発

メーラーThunderbirdを使っています。
今はなきOutlookExpressからの移行を迫られた際に、以降の移行の容易さを評価して採用したのがきっかけです。
以来、ずっとThunderbirdを使っているのですが、ちょっとした不満があり、Add-onの開発をしてみました。

その不満というのは、認証キーの扱いです。
Thunderbirdに限ったことではないのですが、FortiClientVPNを使ってFortiGateとVPN接続する際、e-mailによる二要素認証を使っています。

この時、こんな感じのメールが飛んできます。

f:id:japelin:20220222160554p:plain

ですので、このメールを開いて(選択して)、認証キーをコピーして、FortiClientVPNのボックスに入力する、という作業が必要になります。


これを、メール受信したら勝手にクリップボードにコピーされると楽だなぁ、と考えたのです。

結果的に、2時間調べたくらいではメール受信時に自動処理というのは実現できなかったのですが、認証キーが入ったメールを選択すると、キーだけがクリップボードにコピーされるいうアドオンができました。

f:id:japelin:20220222161553p:plain


これでかなりVPN接続時の手間が減りました!



具体的にはこれだけ。

1. manifest.jsonを作成
2. 処理内容をjavascriptで作成
3. 2つのファイルを7-zipでzipにする
4. アドオンをファイルからインストールする

他で言われているようなプロファイルの作成とかは必要ありませんでした。
ソフトウェアはthunderbird 91と7-zipのみ。

エラー処理してない最低限のコードですけど、とりあえず以下で動きます。
権限も最小限に。

少ししたらzipそのものをダウンロードできるようにしたいと思います。
公式で配布するかどうかは…今のところは考えてません。


manifest.json

{
    "manifest_version": 2,
    "applications": {
        "gecko": {
            "id": "japelin-GetAuthCode@gmail.com",
            "strict_min_version": "91.0"
        }
    },
    "name": "GetAuthCode",
    "description": "Get Authcode From Mail",
    "version": "0.0.1",
    "background": {
        "scripts": ["background.js"]
    },
    "permissions": [
        "messagesRead",
        "clipboardWrite",
        "storage"
    ]
}


background.js

browser.mailTabs.onSelectedMessagesChanged.addListener(async (tab, messageList) => {
    for (let message of messageList.messages) {
        messagePart = await browser.messages.getFull(message.id);
        for (let hcontent of messagePart.headers['subject']) {
            var pos_sbj=hcontent.indexOf("AuthCode");
            if (pos_sbj == 0) {
                var pos_dlm=hcontent.indexOf(" ");
                var authcode=hcontent.slice(pos_dlm+1);
                navigator.clipboard.writeText(authcode);
            };
        };
    };
});


開発手順は後でまとめましょうかね。