Thunderbird Addon - 按发件人过滤

时间:2012-03-16 18:18:49

标签: javascript email firefox-addon xul thunderbird

我有一个电子邮件ID列表。我希望过滤收件箱邮件,并仅显示来自thunderbird中这些用户的电子邮件。请帮我这样做。

这是我到目前为止所尝试的并且它不起作用。但我得到完全不相关的错误消息“我们无法打印或预览此页面”。

var gLocalIncomingServer = MailServices.accounts.localFoldersServer;
var gLocalMsgAccount = MailServices.accounts.FindAccountForServer(
 gLocalIncomingServer);

var gLocalRootFolder = gLocalIncomingServer.rootMsgFolder
                  .QueryInterface(Ci.nsIMsgLocalMailFolder);

const kInboxFlag = Components.interfaces.nsMsgFolderFlags.Inbox; 
var gLocalInboxFolder = gLocalRootFolder.getFolderWithFlags(kInboxFlag); 
gLocalRootFolder.findSubFolder(gLocalInboxFolder.URI); 

gLocalInboxFolder.setFlag(Ci.nsMsgFolderFlags.Mail);

 // Force an initialization of the Inbox folder database.
 var folderName = gLocalInboxFolder.prettiestName;

 var aValue = "example@domain.com";
 var aAttrib = Ci.nsMsgSearchAttrib.Sender;
 var aop = nsMsgSearchOp.Contains;;
 var hitCount = 1;

var searchListener =
 {
  onSearchHit: function(dbHdr, folder) { hitCount++; },
  onSearchDone: function(status)
  {
    print("Finished search does " + aHitCount + " equal " + hitCount + "?");
    searchSession = null;
    do_check_eq(aHitCount, hitCount);
    if (onDone)
    onDone();
  },
 onNewSearch: function() {hitCount = 0;}
};

// define and initiate the search session

var hitCount;
var searchSession = Cc["@mozilla.org/messenger/searchSession;1"]
                    .createInstance(Ci.nsIMsgSearchSession);
searchSession.addScopeTerm(Ci.nsMsgSearchScope.offlineMail, gLocalInboxFolder);
var searchTerm = searchSession.createTerm();
searchTerm.attrib = aAttrib;

var value = searchTerm.value;
// This is tricky - value.attrib must be set before actual values
value.attrib = aAttrib;
value.str = aValue;
searchTerm.value = value;
if (aAttrib > nsMsgSearchAttrib.OtherHeader)
  searchTerm.arbitraryHeader = gArrayHdrs[aAttrib - 1 - nsMsgSearchAttrib.OtherHeader];
searchTerm.op = aOp;
searchTerm.booleanAnd = false;
searchSession.appendTerm(searchTerm);
searchSession.registerListener(searchListener);
searchSession.search(null);
alert("search is done:");

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您实际上不需要编写任何JS代码来完成此任务。 Thunderbird的搜索机制可以通过两种UI访问方式使用:

  • 定义“已保存的搜索”文件夹。这会使用一组条件过滤一个或多个文件夹,并将结果显示在单个文件夹中。查看并了解您可能需要离线搜索,因为它比询问IMAP服务器更快:http://kb.mozillazine.org/Saved_Search

  • 定义可应用于任何文件夹的“邮件视图”。通过右键单击自定义邮件工具栏,选择“自定义...”并将标有“邮件视图”的组合框拖到工具栏中。点击“完成”关闭自定义对话框。单击工具栏上的组合框,选择“自定义...”,单击“新建...”以定义和命名过滤条件。然后,您可以通过单击组合框并将其定位在“自定义视图”标题下来应用邮件视图。

对于您的过滤条件,您可以输入所有名称作为“any”规则匹配的单独谓词,或者您可能希望使用“is in my address book”谓词并将所有这些人放入特别地址簿。例如,这样的规则看起来像:“From”“在我的地址簿中”“酷人”。您可以通过“地址簿”窗口中的“文件...新建...地址簿”创建新的地址簿。

如果您希望以编程方式执行操作并且希望能够在运行时让人员列表发生变化,那么您需要查看我关于创建快速过滤器栏扩展的博客文章,因为这是挂钩自定义的最简单方法将逻辑过滤到不会破坏的Thunderbird UI中:

http://www.visophyte.org/blog/2010/05/02/thunderbird-quick-filter-bar-extensions-theyre-a-thing/

该示例的代码目前存在于github上: github.com/asutherland/qfb-pivot

如果您的电子邮件列表不会发生太大变化,您还可以创建“已保存的搜索文件夹”(内部虚拟文件夹),您应该查看mxr.mozilla.org/comm-central/ source / mailnews / base / src / virtualFolderWrapper.js及其createNewVirtualFolder方法。

对两个网址进行去超链接的道歉,但反垃圾邮件机制不允许我在帖子中有超过2个链接...