我想添加到 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