通过终端从 Thunderbird 查询未读电子邮件数

通过终端从 Thunderbird 查询未读电子邮件数

我想添加到 i3 状态栏指示器,显示 Thunderbird 配置文件中未读电子邮件的数量。由于 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),该帐户上至少有一条新消息。如果 (^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

我知道这已经很旧了,而且可能已经得到了回答,但这是我的两分钱。希望能帮助到你!

#!/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="对这些文件进行 greps,这是 Thunderbird 用于保持未读电子邮件计数的字段,并且始终获取这些行中的最新行(有时计数会重复,但从我所见,最后一行始终是最新的) 。

答案3

本文:

Thunderbird 没有脚本功能。

同一篇文章实际上建议直接从邮箱文件中读取,检查X-Mozilla-Status您已经在做的事情(显然没有真正按预期工作。)请参阅该文章以获取有关X-Mozilla-Status标题和 mbox 格式的更多指针,以仔细检查您的内容我们正在做的是符合他们的指示。

另一种可能性是您使用的是 Thunderbird 的 IMAP,在这种情况下它的行为有所不同。 IMAP 有特殊标志(例如\Seen跟踪消息状态,Thunderbird 可能正在缓存和处理这些标志,因此也可以查找它们。如果您使用 IMAP,另一个选择是使用单独的 IMAP 客户端直接查询服务器(您会发现大多数常见脚本语言的 IMAP 绑定。)此方法的缺点是您将使用网络进行此检查,并且还必须管理和存储凭据。

答案4

INBOX.msf 很复杂。这可以工作,但不是很好,因为它过度简化了 INBOX.msf 的读取。如果未读,它可以忽略新邮件。

编辑:我必须安装 Thunderbird 的 apt 版本,这在 Snap 版本(Ubuntu 18.04.6 LTS、Thunderbird 91.11.0)上不起作用。

#!/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

相关内容