Thunderbird 自定义工具栏按钮
发布于 2009 年 12 月 2 日
如果您看过视频并想知道我在 Thunderbird 中“移动垃圾邮件”按钮的 JavaScript 代码是什么,请继续阅读。 如果您还没有看过视频,本文将介绍如何使用 Custom Buttons 插件将自定义工具栏按钮添加到 Thunderbird。
Thunderbird 的 Custom Buttons 插件允许您将按钮添加到 Thunderbird 的工具栏。 该插件使用简单:安装完成后,右键单击工具栏并选择“添加新按钮...”,给按钮命名,选择要使用的图像,然后为按钮提供一些 JavaScript 代码。 嗯,好吧,最后一步没那么容易。 因为您需要知道如何编写 JavaScript,并且需要了解 Thunderbird API。 这里是我使用的几个按钮。
第一个按钮清空回收站文件夹。 我的图像是

代码很简单
MsgEmptyTrash();
在“代码”选项卡下输入该代码,您应该有一个用于清空回收站的按钮。
第二个按钮将当前文件夹中的所有垃圾邮件移动到垃圾邮件文件夹。 Thunderbird 可以在下载电子邮件并将其分类为垃圾邮件时自动执行此操作,但我喜欢事先查看哪些内容进入垃圾邮件文件夹,以便有机会审查 Thunderbird 的决定。 我用于此按钮的图像是

这里的代码要复杂得多,我不是从头开始开发的,我使用了在 Thunderbird 源代码中找到的现有函数,该函数删除了当前文件夹中的垃圾邮件。 我所做的只是更改它,以便它移动而不是删除。
//=====================================================================
// Modification of deleteJunkInFolder().
//
function junkJunkInFolder()
{
MsgJunkMailInfo(true);
var view = GetDBView();
// Get junk mail folder.
var msgURI = view.getURIForViewIndex(0);
var msgHdr = messenger.msgHdrFromURI(msgURI);
var server = msgHdr.folder.server;
var spamSettings = server.spamSettings;
var spamFolderURI = spamSettings.spamFolderURI;
var currentFolderURI = msgHdr.folder.folderURL
if ( !spamFolderURI ) {
dump('no spam folder!');
return;
}
//alert("Current folder is: " + currentFolderURI + "\nJunk folder is: " + spamFolderURI);
if ( currentFolderURI == spamFolderURI ) {
//alert("Current folder is the Junk folder");
return;
}
var junkTargetFolder = GetMsgFolderFromUri(spamFolderURI);
// Select junk messages.
// Need to expand all threads, so we find everything
view.doCommand(nsMsgViewCommandType.expandAll);
var treeView = view.QueryInterface(Components.interfaces.nsITreeView);
var count = treeView.rowCount;
if ( !count ) return;
var treeSelection = treeView.selection;
var clearedSelection = false;
for ( var i = 0; i < count; ++i ) {
var messageUri = view.getURIForViewIndex(i);
var msgHdr = messenger.msgHdrFromURI(messageUri);
var junkScore = msgHdr.getStringProperty("junkscore");
var isJunk = ((junkScore != "") && (junkScore != "0"));
// if the message is junk, select it.
if ( isJunk ) {
// only do this once
if ( !clearedSelection ) {
// clear the current selection
// since we will be deleting all selected messages
treeSelection.clearSelection();
clearedSelection = true;
treeSelection.selectEventsSuppressed = true;
}
treeSelection.rangedSelect(i, i, true /* augment */);
}
}
// If we didn't clear the selection there was no junk, so bail.
if ( !clearedSelection ) return;
treeSelection.selectEventsSuppressed = false;
// delete the selected messages
SetNextMessageAfterDelete();
view.doCommandWithFolder(nsMsgViewCommandType.moveMessages, junkTargetFolder);
treeSelection.clearSelection();
}
//=====================================================================
junkJunkInFolder();
我不会详细解释代码,特别是考虑到我没有编写大部分代码,但操作非常简单:获取对当前文件夹和垃圾邮件文件夹的引用,然后循环遍历当前文件夹中的所有消息并选择垃圾邮件。 循环之后,如果选择了任何消息,则将它们移动到垃圾邮件文件夹。