【问题标题】:Thunderbird Addon - Filter by SenderThunderbird 插件 - 按发件人过滤
【发布时间】:2012-04-02 07:22:11
【问题描述】:

我有一个电子邮件 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:");

【问题讨论】:

    标签: javascript email firefox-addon xul thunderbird


    【解决方案1】:

    【讨论】:

      【解决方案2】:

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

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

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

      对于您的过滤条件,您可以将所有姓名作为单独的谓词输入其中“任何”规则匹配,或者您可能想要使用“在我的地址簿中”谓词并将所有这些人放在一个专用通讯录。例如,这样的规则看起来像:“发件人”“在我的通讯录中”“很酷的人”。您可以通过地址簿窗口中的“文件...新建...地址簿”创建一个新的地址簿。

      如果您更喜欢以编程方式做事,并且希望能够在运行时使人员列表发生变化,您将需要查看我关于创建快速过滤栏扩展的博客文章,因为这是挂钩自定义的最简单方法将逻辑过滤到不会中断的 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 方法。

      很抱歉取消了其中两个 URL 的超链接,但反垃圾邮件机制不允许我在帖子中包含超过 2 个链接...

      【讨论】:

      • 感谢您的回答。这些电子邮件列表将根据用户请求而更改(即它们是动态的)。因此创建虚拟文件夹不是正确的解决方案。
      猜你喜欢
      • 2011-01-05
      • 2015-05-27
      • 2019-05-04
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 2011-04-01
      • 2021-02-22
      • 2021-04-16
      相关资源
      最近更新 更多