ターミナルでThunderbirdで未読メールの数を確認してください

ターミナルでThunderbirdで未読メールの数を確認してください

Thunderbirdプロファイルで未読メールの数を表示するステータスバーインジケータをi3に追加したいと思います。 Thunderbird自体には、この情報を取得するためのコマンドラインオプションがないため、次のX-Mozilla-Statusコードを使用してデータベースにクエリを試みました。

$ grep 'X-Mozilla-Status:' ~/.thunderbird/<profile>/ImapMail/<email>/INBOX

しかし、すべてのメッセージは同じステータスコードを持っているようです(メッセージを読んでいないかどうかは違いありません)。

X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000

完全な/未読の電子メールの数の統計を取得するためのスクリプトを書く他の方法はありますか?

答え1

いくつかの実験結果が役に立つことを願っています。 (Tbird 60.3.1、MX-Linux 17.1)Anlarが言ったように、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)、このアカウントに新しいメッセージが 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)]

Mockを知っている人が正しい数を抽出する方法を説明できますか?

答え2

私はこれが古く、おそらくすでに答えを受けていることを知っていますが、ここに私の2セントがあります。役に立ったことを願っています!

#!/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]}"

私は2つの電子メールアカウント(個人用と仕事用)を持っています。どちらもmsfThunderbirdが情報を更新するために使用する別々のファイルを持っています。

スクリプトは、"A2="Thunderbirdが未読の電子メールの数を維持するために使用するフィールドであるこれらのファイルを収集し、常に最新の行を取得します(時々数が繰り返されますが、私が見たところ、最後の行は常に最新です)。 )。

答え3

~からこの記事:

Thunderbirdにはスクリプト機能はありません。

同じ記事では、実際にメールボックスファイルから直接読むことを提案し、すでに行っていることをX-Mozilla-Status確認してください(明らかに期待どおりに動作しないようです)、X-Mozilla-Statusヘッダーとmboxの形式に関する追加の手順については、その記事を参照してください。私たちが行っているコンテンツの指示と一致します。

もう1つの可能性はThunderbirdのIMAPを使用している場合ですが、この場合は動作が異なります。 IMAPには、Thunderbirdがキャッシュして処理できる特別なフラグ(\Seenメッセージステータスの追跡など)があり、それを見つけることもできます。 IMAP を使用する場合、別のオプションは別の IMAP クライアントを使用してサーバーに直接問い合わせることです。スクリプト言語の最も一般的なIMAPバインディングを見つけることができます。)

答え4

INBOX.msfは複雑です。これはうまくいきますが、INBOX.msfの読み込みを単純化しすぎるため、これはうまくいきません。未読の新しいメッセージは無視できます。

編集:Snapバージョン(Ubuntu 18.04.6 LTS、Thunderbird 91.11.0)では動作しない適切なバージョンのThunderbirdをインストールする必要がありました。

#!/bin/bash

cd $HOME/.thunderbird
inbox=$(find . -name 'INBOX.msf')

#list file in reverse, strip 94's, remove the first occurrence of 94=0 and all after
count=$(tac $inbox | grep '(^94=' | sed -n '/94=0/q;p')

#count line number for new emails
echo $count | grep -o "94=" | wc -l

関連情報