メールソフト Thunderbird 用プラグインの試作
高橋 真梨

1

(指導教員：粕川 正充)

はじめに賢い迷惑メールフィルタ、組み込みの RSS リーダー、クイックサーチなど数多くの機能を持つメー
ルプログラム Thunderbird には独自の機能拡張を行うためにプラグインを作成し組み込む機能がある。本研究は Thunderbird 用の機能拡張を行うためにはどのようにすればよいのかと実際に作成した機能拡張についての報告である。

2

図 2: Firefox 上で hello.xul を実行

4

開発の動機

上で述べたように、XUL を用いれば Firefox でも Thunderbird でもプラグインを作成できる。しかし一方は Web ブラウザでもう一方はメーラであるため、内部のドキュメント構造は大きく異なる。
そのため内部のドキュメント構造を利用した機能拡張をするためには、別々な XUL プログラムを作成する必要がある。Gecko エンジンはドキュメント構造を扱うために「DOM(Document ObjectModel)」というインタフェースを採用し、これを制御するための言語として JavaScript を採用している。DOM と JavaScript は Internet Explorer
でも採用されているので、どちらのブラウザでもアドレス欄に筆者が普段使用しているメールプログラムである Mozilla Thunderbird には Spam メールをブロックするためのメールフィルタ機能があったり、好みの色で関連ごとにラベル付けが可能であり、とても便利に使っている。一方、このプログラムと開発元が同じ Mozilla Firefox という Web ブラウザ
では、プラグインを用いて自分で機能拡張を行うことができる。Firefox と同じように Thunderbird
でも機能拡張を行い、自分の考えをまとめる機能をメールプログラムに持たせたいみたいが、どのように機能を拡張すればよいかと考えたのが開発の動機である。

3

DOM 構造と JavaScript

Gecko エンジンと XULJavaScript:alert(document.getElementsByTagName("body").item(0).innerHTML)WEB ブラウザプログラムの中で HTML、CSS、JavaScript などを解釈して表示するための機能をレンダリングエンジンと呼ぶ。Firefox や Netscape
Navigator などの Web ブラウザは「Gecko」というレンダリングエンジンを利用して動いている。
メールソフトである Thunderbird もこの「Gecko」エンジンを利用して動いている。なお、Gecko とは「ヤモリ」のことである。この Gecko エンジンを外から制御するには「XUL」(ズール) という言語を用いればよい。Firefox と同様 Thunderbird もプラグインを XUL で記述することによって機能拡張ができることを確認した。なお、hello,worldを表示させるための XUL プログラムを図 1 に示す。これを Firefox で読み込んで実行した結果をと入力すると同じ内容が表示される。この文ではalert() が画面にウィンドウをポップアップさせる命令であり、引数の document 以下が Web ブラウ
ザの DOM のうちで現在表示している Web ページの HTML 文字列の位置を示す場所を表している。

5

プラグインの構造と chromeURL

これらに基づいて、機能拡張用プラグインの試作を行った。プラグインのファイルは.xpi で終わる。これは java の jar ファイルと同じように zip で圧縮されており、圧縮された中には、インストールするモジュールをどこに配置するかを示すための install.rdf ファイルと chrome フォルダがある。chrome フォルダは Thunderbird や Firefox が解釈する chrome:URL と呼ばれるモジュールの場所を指しており、これらでは通常の URL と同様に使用することができる。なお、chromeURLの基本的な構文は以下の通り。

<?xml version="1.0"?><?xml-stylesheet href="chrome://global/skin/"
type="text/css"?><window xmlns="http://www.mozilla.org/keymaster/
gatekeeper/there.is.only.xul"><box align="center" pack="center" flex="1"><description>Hello, world</description></box></window>

chrome://<パッケージ名>/<要素>/<file.xul>

図 1: hello.xul

ここで、<パッケージ名>は messenger や editor などのパッケージを示し、<要素> はパッケージごとの「content」,「skin」,「locale」などを示す。
最後の<file.xul> はファイル名に対応する。
プラグイン中の chrome フォルダは、その下に.jarファイルが置かれており、このアーカイブ内の情

図 2 に示す。なお、Internet Explorer は XUL に対応していないため実行できない。

35

報から、どのモジュールを chromeURL 中のどこにを配置するかが決定される。

6のだが、メールの表示されている messagepane という document 内では予め JavaScript の実行ができないようにされており、スクリプトを実行させるまでには至らなかった。

試作したプラグインと XPCOM

これらの情報をもとに、自分でプラグインを作成してみた。試作したプラグインは、メールを読んでいる途中で、これはと思うものに対してボタンをクリックすると、メールの中にリンクやボタンが現れるというものである。これを行うにあたり、まず DOM を利用してこのメールにリンク情報要素の a タグ、ボタン要素のための form タグや実行されるべきスクリプトを含む script タグを貼り付け、これを一度ファイルに書き出して、loadURI メソッドを用いて読み込むことで、メールにボタンが表示された。
JavaScript にはもともとファイル入出力の機能がないが、Gecko エンジンは「XPCOM( Cross Platform Component Object Module)」という、動いている OS によらずにファイルの読み書きやオブジェクト間のメッセージ通信、メモリ管理といった機能を呼び出すための機能がある。この XPCOMを利用して、ファイルの書き出しや読み込みを行った。作成したプラグインを組み込んだ Thunderbird の画面を図 3 に、またプラグインの実行を行った画面を図 4 に示す。

7

まとめと今後の課題

Gecko エンジンを用いている Firefox や Thunderbird で共通となる xul についての知識を身に付け、これを用いて Thunderbird 用のプラグインを試作したが、考えた通りのプログラムは作成できなかった。
調べてみると、以前は Thunderbird のウィンドウ内で JavaScript が実行できていたが、セキュリティの問題が生じるために、実行を禁止するように変更されたとあった。自分の考えていたプログ
ラムの作成はできないことがわかったが、別な方法をみつけて、メーラでその機能を実現できないかと考慮中である。

8

参考文献
1. Vaughn Bullard,Kevin T. Smith,Michael
C. Daconta,”Essential XUL Programming”,John Wiley & Sons, Inc,ISBN0-471-41580-4
2. 下田 洋志, 大和 徳明,「Firefox を究める
256 のテクニック」, 秀和システム,2006 年 1月,ISBN 4-7980-1224-6
3. 大浦 淳,「Firefox の改造テクニック」, 毎日コミュニケーションズ,2005 年 9 月,ISBN 48399-1805-8
4. Brian King,Restart Thunderbird 0.9,
http://brian.kingsonline.net/talk/
5. Mitch Graw,The Deep End,
http://thunderbirddocs.blogspot.com/
6. mozilla.org,http://www.mozilla.org/,(mozilla コミュニティ)図 3: プラグインを組み込んだ Thunderbird

7. mozdev.org,http://www.mozdev.org/,(mozilla 開発者コミュニティ)図 4: プラグインの実行後本当はさらにそのボタンを押すことにより、メールの仕分けや分類などができるようにしたかった

36