Thunderbird 进阶
条评论前言
上一篇简单介绍了一些Thunderbird的常用知识和小技巧,但是Thunderbird可以把玩的东西远远不止这些,下面这篇文章将介绍另外3个Thunderbird可以玩的地方,分别是制作属于自己的附加组件
,巧用SQLite管理邮件
,邮件安全
.
制作自己的附件组件
将通过一个实际的案例讲述如何编写Thunderbird插件,在这个演示的demo中将会实现以下两个功能:
- 在statusbar 添加了一个时间标签,每一分钟更新一次.
- 每隔半小时弹窗一次,提醒用户注意休息,类似于小闹钟.
有几个名词需要首先解释以下:
- xpi: mozilla系列应用程序(如Mozilla Firefox和Mozilla Thunderbird)扩展文件.
- xul: 可扩展标记语言用户界面语言,是为了支持Mozilla系列的应用程序()而开发的使用者界面标示语言.
- 扩展: 扩展可为应用程序新添功能.
具体操作过程分为如下几个部分.
创建需要的文件和文件夹.
├── chrome
│ ├── content
│ │ ├── chaubeau_demo.js
│ │ └── chaubeau_demo.xul
│ ├── locale
│ └── skin
├── chrome.manifest
├── defaults
│ └── preferences
└── install.rdf
- 以上目录结构的:
chrome
,content
文件夹的名字不可更改.- install.rdf名字不可更改,必须放在XPI文件根目录下,它定义了所要安装的安装信息.
- chrome.manifest的名字和路径同install.rdf一样,也不可以更改.定义了应用程序窗口的内容区域之外的用户界面元素的集合.
编写install.rdf
示例代码如下:
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>chaubeau_demo@chaubeau.github.io</em:id>
<em:name>Demo on Thunderbird</em:name>
<em:version>0.1</em:version>
<em:type>2</em:version>
<em:creator>Chaubeau</em:creator>
<em:homepageURL>https://github.com/chaubeau/Tool/tree/master/chaubeau_demo</em:homepageURL>
<em:description>关于Thunderbird附件组件的演示,本组件实现了两个简单的演示功能:
1.在statusbar 添加了一个时间标签,每一分钟刷新一次.
2.每个半小时弹窗一次,提醒用户注意休息,类似于小闹钟.
本组件旨在演示Thunderbird附件组件的开发流程.</em:description>
<em:targetApplication>
<Description>
<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
<em:minVersion>28.0</em:minVersion>
<em:maxVersion>36.0.*</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>
下面对一些必要的属性做简单的介绍:
- ID(
<em:id>
),一般ID是下面两个格式,其他的格式从火狐1.5之后就不予支持.
- GUID (Firefox 1.0)
- 类似与一个这样结构的字符串,extensionname@example.org
- version(
<em:version>
),版本,一个标志当前扩展版本的字符串.- type(
<em:type>
),一个整数代表扩展的类型,’2’代表是扩展程序.- name(
<em:name>
),表示该扩展的名字.- targetApplication,表示该扩展是用于Mozilla哪一种应用程序的,用ID做区别.
{3550f703-e582-4d05-9a08-453d09bdfdc6}
代表Thunderbird.{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
代表Firefox.- minVersion:该扩展支持的最小版本.
maxVersion:该扩展支持的最大版本.
以上是对示例代码的简单解释,详细的文档资料请参考Mozilla官方文档.
编写chrome.manifest文件
示例代码:
content chaubeau_demo chrome/content/
overlay chrome://messenger/content/messenger.xul chrome://chaubeau_demo/content/chaubeau_demo.xul
上面讲到,Chrome指的是应用程序窗口的内容区域之外的用户界面元素的集合,这些用户界面元素包括工具条,菜单,进度条和窗口的标题栏等.一般包括下面几种类型:
- 内容(Content):通常是 XUL 文件。
- 区域(Locale) :存放本地化信息。
- 皮肤(Skin):描述 chrome 的外观。通常包含 CSS 和图像文件。
- overlay: 定义了将自己的XUL文件与那个系统XUL文件合并.
Mozilla程序通过Chrome URIs来存取这些文件,比如在火狐浏览器里面访问:chrome://browser/content/browser.xul 就是是浏览器的主界面.
编写XUL文件
XUL示例代码如下:
<?xml version="1.0"?>
<overlay id="chaubeau" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/javascript" src="chrome://chaubeau_demo/content/chaubeau_demo.js"/>
<statusbar id="status-bar">
<statusbarpanel id="my-panel" label="Date"/>
</statusbar>
</overlay>
以上XUL代码会加载一个JS文件,然后在statusbar上定义了一个自己的panel,ID为”my-panel”,代码比较简单不做详细解释.
XUL代码里面加载的JS代码如下:
window.addEventListener(“load”, function(e) {
startup();
}, true);
window.setInterval(
function() {
startup();
}, 6000); //update date every minute
window.setInterval(
function()
{
window.alert("你应该休息一会了~");
},18000);
function startup() {
var myPanel = document.getElementById("my-panel");
var date = new Date();
var day = date.getDay();
var dateString = date.getFullYear() + "年" + (date.getMonth()+1) + "月" + date.getDate()+"日";
myPanel.label = "时间: " + dateString;
}
以上JS代码分别调用了window.addEventListener和window.setInterval两个系统函数.函数startup负责更新时间.
打包扩展文件.
回到扩展文件根目录下,执行zip -r chaubeau_demo.xpi *
命令,生成扩展文件.
安装扩展文件.
打开Thunderbird的附件组件管理器,选择从文件安装附件组件.选择生成的chaubeau_demo.xpi文件安装,重启Thunderbird.
提交附件组件
将你开发的附件组件,提交到Mozilla的展示库,提交是免费的(需要审核),要完成提交流程,需要附加组件包(*.xpi文件)和至少一幅该附加组件运行时的屏幕截图.提交地址,enjoy it;
其他
如果不想自己编写install.rdf和chrome.manifest以及建文件夹,那么还有一个方法,附加组件封装工具,这个工具帮助你生成扩展组件的基础信息.
以上是Thunderbird附件组件的一个简单的demo,实际上Mozilla支持多种方式:
附加组件 SDK 扩展
,使用一组高级别的 JavaScript APIs 开发无需重启的扩展。无须重启的扩展
,手动创建无需重启的扩展。覆盖式扩展
,使用 overly 的方式创建传统的扩展,也就是该demo示例的方式.
如果可能,最明智的是采用 Add-on SDK 的方式,它采用了无需重启的扩展机制,可以简化某些任务并在卸载后自动清理。如果 Add-on SDK 无法满足你的需求,可采用手动创建无需重启扩展的方式.Mozilla不仅提供了附件的扩展接口,还提供了主题
接口,所谓主题,就是用来自定义用户界面的附加组件.除此之外还有Search engine plugins
和Plugins
.可以参考Mozilla的官方文档.
以上代码下载地址:chaubeau-github
巧用SQLite管理邮件
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,进入$HOME/.thunderbird/*.default文件夹,会看到如下SQLite数据文件.
addons.sqlite content-prefs.sqlite extensions.sqlite
permissions.sqlite trackerbird.sqlite places.sqlite
blist.sqlite cookies.sqlite formhistory.sqlite
webappsstore.sqlite chromeappsstore.sqlite downloads.sqlite
global-messages-db.sqlite signons.sqlite
执行sqlite3 global-messages-db.sqlite
打开global-messages-db这个DB.
sqlite> .tables
attributeDefinitions imConversations
contactAttributes imConversationsText
contacts imConversationsText_content
conversations imConversationsText_segdir
conversationsText imConversationsText_segments
conversationsText_content messageAttributes
conversationsText_segdir messages
conversationsText_segments messagesText
ext_mimeTypes messagesText_content
folderLocations messagesText_segdir
identities messagesText_segments
sqlite> .mode column
sqlite> .header on
sqlite> select count(*) from contacts;
count(*)
----------
6142
这些sqlite库里面存了丰富的信息,可以去统计每天收发的邮件,可以去查看邮件索引信息,联系人等信息,具体怎么使用可以自由的发挥,当然也可以结合上面的demo开发相应的组件.
邮件安全
Enigmail是Mozilla Thunderbird的附加组件,它可以有效保护您邮件通讯的隐私.Engimail基于公钥加密技术,要求每个用户都要生成自己的密钥对
- 公钥:可以与您的联系人进行分享。一旦您知道某位联系人的公开密钥,您就可以给这个人发送加密的电子邮件.
- 私钥:通过某个密码或者口令等实行保护,这个密码不能和其他人分享.
Enigmail也可以给您的邮件附上数字签名。如果收信人有一份您的有效公开密钥,他就可以知道这封邮件的来源,并且其内容也不会在发送途中被篡改.Enigmail只是提供了一个平台,真正发挥作用的是Thunderbird中的GnuPG加密技术,因此需要安装GNUPG.因此,需要在电脑上安装GNUPG工具以及Thunderbird的Enigmail扩展.
enigmail文档和GNUPG文档都非常的详细,具体的操作过程就不在此赘述.
- 本文链接:http://www.darcy.org.cn/2015/07/20/thunderbird-jin-jie/
- 版权声明:作者拥有版权,转发请注明出处来源