Javascript Thunderbird插件-按发件人筛选

Javascript Thunderbird插件-按发件人筛选,javascript,email,firefox-addon,xul,thunderbird,Javascript,Email,Firefox Addon,Xul,Thunderbird,我有一个电子邮件ID列表。我想过滤收件箱中的邮件,并在thunderbird中仅显示来自这些用户的电子邮件。请帮我做这个 这是我到目前为止尝试过的,它不起作用。但我收到了完全不相关的错误消息“我们无法打印或预览此页面” 您实际上不需要编写任何JS代码来实现这一点。Thunderbird的搜索机制可以通过两种用户界面可访问的方式使用: 定义“保存的搜索”文件夹。这将使用一组条件筛选一个或多个文件夹,并在单个文件夹中显示结果。请参阅并注意,您可能需要脱机搜索,因为这比询问IMAP服务器更快: 定义

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

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


您实际上不需要编写任何JS代码来实现这一点。Thunderbird的搜索机制可以通过两种用户界面可访问的方式使用:

  • 定义“保存的搜索”文件夹。这将使用一组条件筛选一个或多个文件夹,并在单个文件夹中显示结果。请参阅并注意,您可能需要脱机搜索,因为这比询问IMAP服务器更快:

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

对于您的筛选条件,您可以键入所有名称作为单独的谓词,其中“any”规则匹配,或者您可能希望使用“is in my address book”谓词,将所有这些人放在一个特殊的地址簿中。例如,这样的规则看起来像:“From”在我的地址簿中是“cool people”。您可以通过“通讯簿”窗口中的“文件…新…通讯簿”创建新的通讯簿

如果您喜欢以编程方式进行操作,并且希望能够在运行时改变人员列表,那么您需要查看我关于创建快速过滤条扩展的博客文章,因为这是将自定义过滤逻辑挂接到Thunderbird UI中的最简单方法,而Thunderbird UI不会中断:

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

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


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

您看到这个Mozilla页面了吗

感谢您的回答。这些电子邮件列表将根据用户请求而更改(即它们是动态的)。因此创建虚拟文件夹不是正确的解决方案。
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:");