Я надеюсь, что результаты некоторых экспериментов будут полезны. (Tbird 60.3.1, MX -Linux 17.1 )Как сказал Анлар, файл INBOX изменяется при получении сообщения, но не при его предварительном просмотре или чтении. Соответствующий INBOX.msf в непонятном формате mork фиксирует такие действия.
Тег (^94=1 )добавляется в INBOX.msf при получении нового сообщения и (^94=0 )при прочтении или предварительном просмотре ранее непрочитанного сообщения. Следовательно, если
grep '(^94=.)' /home/user/.thunderbird/profile-name/ImapMail/imap.account.com/INBOX.msf | tail -1
показывает (^94=1 ), в этой учетной записи есть как минимум одно новое сообщение. Если (^94=0 ), то последним действием было чтение или предварительный просмотр нового сообщения; однако могут оставаться непрочитанные сообщения.(Редактировать :исправлено имя файла)
Это только метод проб и ошибок, но скрипт, основанный на нем (только новый детектор сообщений, без счета )пока работает хорошо:)(см. этот вопрос на форуме Mozilla.)
Добавлено:
Поля файла msf перечислены в начале; среди них (A1=numMsgs )(A2=numNewMsgs ). Непонятно, как использовать это для подсчета. Например, в этой учетной записи есть 3 новых сообщения:
grep -n '(^A2=.)' INBOX.msf
432: (^A8^85)(^B5=50)(^A1=20)(^A2=2)(^A6=50)(^BD^77A)(^C4=12)(^C5=2)
433: (^C6=0)(^C7=0)(^C9^5B0)(^C8^A0)(^A4^760)(^A2=0)(^A2=0)(^A2=0)(^AA=0)]}
480: (^B0=1)(^88^83)(^B1=222)(^B2^84)(^A8^85)(^B5=50)(^A1=21)(^A2=3)
482: (^A4^760)(^A2=0)(^A2=0)(^A2=0)(^AA=0)]
Может быть, кто-то, кто знает морк, может объяснить, как извлечь правильный номер?
Из этой статьи:
Thunderbird doesn't have a scripting capability.
В той же статье на самом деле рекомендуется читать из файлов почтового ящика напрямую, проверяя X-Mozilla-Status
, как вы уже делаете (, и, по-видимому, не работает так, как ожидалось. )Прочтите эту статью, чтобы узнать больше о заголовке X-Mozilla-Status
и формате mbox, чтобы еще раз проверить, соответствует ли то, что вы делаете, их инструкциям.
Другая возможность заключается в том, что вы используете IMAP от Thunderbird, и в этом случае он ведет себя иначе. IMAP имеет специальные флаги (, такие как \Seen
, для отслеживания статуса сообщения, и возможно, что Thunderbird кэширует и обрабатывает их, так что, возможно, их тоже стоит поискать. Если вы используете IMAP, другим вариантом является использование отдельного клиента IMAP для прямого запроса к серверу (. Вы найдете привязки IMAP для большинства распространенных языков сценариев. )Недостаток этого подхода в том, что вы будете использовать сеть для этой проверки, а также вам придется управлять учетными данными и хранить их.
Я знаю, что это старо и, возможно, на него уже ответили, но вот мои пять копеек. Надеюсь, поможет!
#!/bin/bash
THUNDERBIRD_HOME=$HOME/.thunderbird
PERSONAL_ACCOUNT="imap.gmail.com/INBOX-1.msf"
WORK_ACCOUNT="imap.gmail-1.com/INBOX.msf"
cd $THUNDERBIRD_HOME
COUNTS=`find. -name '*.msf' -exec grep -REo 'A2=[0-9]' {} + | grep -Eo 'imap.gmail.*INBOX.*=[0-9]+'`
declare -A COUNT_BY_ACCOUNT
# Counts are in chronological order, so it's safe to assume that the latest is the most recent update
for line in $COUNTS; do
ACCOUNT=`echo $line | awk -F ':A2=' '{ print $1 }'`
COUNT=`echo $line | awk -F ':A2=' '{ print $2 }'`
COUNT_BY_ACCOUNT[$ACCOUNT]=$COUNT
done
echo "${COUNT_BY_ACCOUNT[$PERSONAL_ACCOUNT]}/${COUNT_BY_ACCOUNT[$WORK_ACCOUNT]}"
У меня две учетные записи электронной почты (Личная и Рабочая ). Оба имеют отдельные файлы msf
, используемые Thunderbird для обновления информации о них.
Этот скрипт просто ищет "A2="
те файлы, которые являются полем, которое Thunderbird использует для подсчета непрочитанных писем, и всегда получает самую последнюю из этих строк (иногда подсчеты дублируются, но из того, что я видел, последняя строка всегда самая последняя ).
Надеюсь, это поможет. Проверяйте только наличие непрочитанных сообщений, а не количество.
grep '(^94=.)' INBOX.msf |tail -1|grep '(^94=1)'|wc -l
Указание на ваш INBOX.msf
Проверено и используется с Conky.