Здравствуйте!
Подскажите, пожалуйста, возможно ли с помощью Thunderbird (3.1.2, IMAP) решить такую задачу: Пользователь вручную сортирует письма - перетаскивает их из папки "Входящие" в нужные тематические папки. Так вот необходимо, чтобы на каждое вновь появившееся письмо в целевой папке запускалось бы некое действие с этим письмом (расссылалось бы уведомление определенному списку адресатов, вложение сохранялось бы в определенную сетевую папку, после этого вложение удалялось бы из тела письма). Как выполнить действия - понятно, расширений для этого полно, а вот как заставить Thunderbird реагировать на появление письма где-либо, кроме "Входящих" - не могу понять.
Заранее спасибо!

Думаю, в первом приближении как-то так:

Выделить код

Код:

var folderListener = {
    OnItemAdded: function(parent, item)
    {
         alert('Письмо от ' + item.QueryInterface(Components.interfaces.nsIMsgDBHdr).mime2DecodedAuthor +
               ' добавлено в папку ' + parent.prettiestName);
    }
}

var mailSession = Components
    .classes["@mozilla.org/messenger/services/session;1"]
    .getService(Components.interfaces.nsIMsgMailSession);
    
mailSession.AddFolderListener(folderListener, 1);
luitzen пишет

Думаю, в первом приближении как-то так:

Выделить код

Код:

var folderListener = {
    OnItemAdded: function(parent, item)
    {
         alert('Письмо от ' + item.QueryInterface(Components.interfaces.nsIMsgDBHdr).mime2DecodedAuthor +
               ' добавлено в папку ' + parent.prettiestName);
    }
}

var mailSession = Components
    .classes["@mozilla.org/messenger/services/session;1"]
    .getService(Components.interfaces.nsIMsgMailSession);
    
mailSession.AddFolderListener(folderListener, 1);

Спасибо за пример, но я не программист и код на JS не разрабатывал, тем более для TB. Подскажите, пожалуйста, как применять данный код?

Ещё раз спасибо.

ags68 пишет

Как выполнить действия - понятно, расширений для этого полно, а вот как заставить Thunderbird реагировать на появление письма где-либо, кроме "Входящих" - не могу понять.

Видимо, это надо расширения заставлять как-то реагировать.

ags68 пишет

Спасибо за пример, но я не программист и код на JS не разрабатывал, тем более для TB. Подскажите, пожалуйста, как применять данный код?

Слово «триггер» ввело меня в заблуждение. Думал, что вы хотите из вашего кода вызывать методы, предоставляемые расширениями. А по-другому мой код никак не применим, извините :(.

Я правильно понимаю, что нужно писать расширение, переопределяющее обработчик событий в папках, дочерних по отношению к Inbox?

ags68 пишет

Я правильно понимаю, что нужно писать расширение, переопределяющее обработчик событий в папках, дочерних по отношению к Inbox?

Расширение можно не писать, есть готовые расширения, позволяющие скармливать Thunderbird произвольный javascript-код.
Переопределение listener’а мне не кажется хорошей идеей, лучше добавить свой.
Повесить listener’ы на каждую папку возможно, но у меня не получилось, Thunderbird крашился при наступлении соответствующих событий. В моём коде listener вешался как бы на все папки разом, а потом устанавливалось, в какой папке событие произошло.
Как расширения, которые вы хотите натравливать на перетаскиваемые письма, определяют, что нужно обработать входящее письмо (соответственно, как имитировать выполнение этого условия применительно к перетаскиваемому письму), я понятия не имею ввиду чрезмерной общности вопроса :).