Запрос непрочитанные электронные письма сосчитать от Thunderbird через терминал

id работает для меня:

$ id -un 0
root

Из man id:

-n, --name
      print a name instead of a number, for -ugG

1
11.11.2018, 18:57
4 ответа

Я надеюсь, что результаты некоторых экспериментов будут полезны. (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)]

Может быть, кто-то, кто знает морк, может объяснить, как извлечь правильный номер?

2
27.01.2020, 23:31

Из этой статьи:

Thunderbird doesn't have a scripting capability.

В той же статье на самом деле рекомендуется читать из файлов почтового ящика напрямую, проверяя X-Mozilla-Status, как вы уже делаете (, и, по-видимому, не работает так, как ожидалось. )Прочтите эту статью, чтобы узнать больше о заголовке X-Mozilla-Statusи формате mbox, чтобы еще раз проверить, соответствует ли то, что вы делаете, их инструкциям.

Другая возможность заключается в том, что вы используете IMAP от Thunderbird, и в этом случае он ведет себя иначе. IMAP имеет специальные флаги (, такие как \Seen, для отслеживания статуса сообщения, и возможно, что Thunderbird кэширует и обрабатывает их, так что, возможно, их тоже стоит поискать. Если вы используете IMAP, другим вариантом является использование отдельного клиента IMAP для прямого запроса к серверу (. Вы найдете привязки IMAP для большинства распространенных языков сценариев. )Недостаток этого подхода в том, что вы будете использовать сеть для этой проверки, а также вам придется управлять учетными данными и хранить их.

0
27.01.2020, 23:31

Я знаю, что это старо и, возможно, на него уже ответили, но вот мои пять копеек. Надеюсь, поможет!

#!/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 использует для подсчета непрочитанных писем, и всегда получает самую последнюю из этих строк (иногда подсчеты дублируются, но из того, что я видел, последняя строка всегда самая последняя ).

0
26.05.2020, 21:15

Надеюсь, это поможет. Проверяйте только наличие непрочитанных сообщений, а не количество.

grep '(^94=.)'  INBOX.msf |tail -1|grep '(^94=1)'|wc -l

Указание на ваш INBOX.msf

Проверено и используется с Conky.

0
11.05.2021, 21:03

Теги

Похожие вопросы