Аддон Thunderbird - Фильтр по отправителю - PullRequest
2 голосов
/ 16 марта 2012

У меня есть список адресов электронной почты. Я хочу фильтровать входящие сообщения и отображать только электронные письма от этих пользователей в 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 ]

1 голос
/ 10 апреля 2015
0 голосов
/ 21 марта 2012

Вам не нужно писать какой-либо JS-код для этого. Механизм поиска Thunderbird можно использовать двумя способами, доступными для пользовательского интерфейса:

  • Определите папку «сохраненный поиск». Это фильтрует одну или несколько папок с набором критериев и представляет результаты в одной папке. Смотрите и знайте, что вам, вероятно, нужен автономный поиск, поскольку он будет быстрее, чем запрашивать сервер IMAP: http://kb.mozillazine.org/Saved_Search

  • Определите «просмотр почты», который можно применить к любой папке. Настройте почтовую панель инструментов, щелкнув ее правой кнопкой мыши, выбрав «настроить ...» и перетащив поле со списком «Почтовые просмотры» на панель инструментов. Закройте диалог настройки, нажав «Готово». Нажмите на поле со списком на панели инструментов, выберите «настроить ...», нажмите «новый ...», чтобы определить и назвать критерии фильтра. Затем вы можете применить представление почты, нажав на поле со списком и расположив его под заголовком «Пользовательские представления».

Для ваших критериев фильтрации вы можете либо ввести все имена в виде отдельных предикатов, где «любое» правило соответствует, или вы можете использовать предикат «есть в моей адресной книге» и просто поместить всех этих людей в специальная адресная книга. Например, такое правило будет выглядеть так: «От» в моей адресной книге «крутые люди». Вы можете создать новую адресную книгу через «Файл ... Новая ... Адресная книга» из окна Адресной книги.

Если вы предпочитаете делать что-то программно и хотите, чтобы список людей менялся во время выполнения, вы можете проверить мою запись в блоге о создании быстрых расширений панели фильтров, так как это самый простой способ подключить пользовательские настройки. фильтрация логики в интерфейсе Thunderbird, которая не сломается:

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 ссылок в сообщении ...

...