Был в форуме вопрос:
В Бате есть очень удобная функция - поиск ответа на письмо:
выбираешь письмо на которое уже отвечал, жмешь Ctrl+BackSpace и открывается письмо которое ты написал в ответ на выбранное.
Очень хочется поиметь что-то подобное в Тандерберде.
Много думал и придумал:
Ответ можно найти по заголовкам: "Referenses" или "In-Reply-To".
Достаточно взять идентификатор выбранного письма в заголовке "Message-ID" сделать поиск по всем папкам "Sent" или "Draft" или "unSent" писем у которых заголовки "Referenses" или "In-Reply-To" содержат этот идентификатор.
Попробовал со стандартным поиском - работает - ищет исправно!
Идем дальше: есть установленный плагин KeyConfig, который позволяет на горячие клавиши повесить последовательности команд встроенного языка.
Теперь вопрос: какими командами можно выдрать из письма на котором установлен фокус содержимое хидера "Message-ID", и как его передать следующей команде - найти письмо, в котором, например, хидер "In-Reply-To" содержит этот идентификатор?
Был на него ответ :
"http://messageidfinder.mozdev.org"
У меня вопрос - есть ли сейчас похожий функционал в Тандерберде?
Отсутствует
В Thunderbird есть возможность «открыть в разговоре». Это такой пункт в меню «другие действия». Если чем-то не устраивает, можно создать виртуальную папку, объединяющую несколько. Или настроить сохранение ответов в папке оригинала. Разумеется, во всех случаях нужно использовать группировку по обсуждениям.
Если же в том виде, в котором хотите вы… Message-ID текущего письма получить просто:
Дальше сложнее. Есть три варианта. Первый — использовать общие механизмы поиска Thunderbird. Второй — как-то паразитировать на средствах получения того способа отображения списков писем, который мы имеем в режиме «Открыть в разговоре». Третий — реализовать свой собственный поиск в надежде, что в данном конкретном случае он будет быстрее, чем универсальный поиск Thunderbird. Второго я не умею. Для третьего, видимо, придётся хранить значение «In-Reply-To» в файле с индексом папки, а переиндексировать неохота .
Код ниже открывает сообщения, у которых в In-Reply-To стоит Message-ID текущего. Он производит поиск в тех папках учётной записи, в которой хранится сообщение, названия которых указаны в первой строке.
let foldersToSearch = ['Входящие', 'Отправленные']; let Ci = Components.interfaces; let Cc = Components.classes; function yieldFolders() { let allFolders = Cc["@mozilla.org/supports-array;1"].createInstance(Ci.nsISupportsArray); gFolderDisplay.displayedFolder.rootFolder.ListDescendents(allFolders); for (let i = 0; i < allFolders.Count(); i++) { let folder = allFolders.GetElementAt(i).QueryInterface(Ci.nsIMsgFolder); if (foldersToSearch.indexOf(folder.prettyName) != -1) yield folder; } } let searchListener = { onNewSearch: function() {}, onSearchHit: function(dbHdr, folder) {MailUtils.displayMessage(dbHdr)}, onSearchDone: function() {} }; let searchSession = Cc["@mozilla.org/messenger/searchSession;1"].createInstance(Ci.nsIMsgSearchSession); let term = searchSession.createTerm(); let value = term.value value.str = '<' + gFolderDisplay.selectedMessage.messageId + '>'; term.value = value; term.attrib = Ci.nsMsgSearchAttrib.OtherHeader; term.op = Ci.nsMsgSearchOp.Is; term.arbitraryHeader = 'In-Reply-To'; term.booleanAnd = true; searchSession.appendTerm(term); for each (let folder in yieldFolders()) searchSession.addScopeTerm(Ci.nsMsgSearchScope.offlineMail, folder); searchSession.registerListener(searchListener); searchSession.search(null);
С кастомной кнопки работает исправно.
Отсутствует