터미널을 통해 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), 이 계정에 새 메시지가 하나 이상 있습니다. (^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

나는 이것이 오래되었고 아마도 이미 답변을 받았을 것이라는 것을 알고 있지만 여기에 내 두 센트가 있습니다. 도움이 되었기를 바랍니다!

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

저는 두 개의 이메일 계정(개인용과 업무용)을 가지고 있습니다. 둘 다 msfThunderbird가 정보를 업데이트하는 데 사용하는 별도의 파일을 가지고 있습니다 .

스크립트는 "A2="Thunderbird가 읽지 않은 이메일 수를 유지하는 데 사용하는 필드인 이러한 파일을 수집하고 항상 최신 행을 가져옵니다(때때로 개수가 반복되지만 제가 본 바에 따르면 마지막 행은 항상 최신입니다). ).

답변3

~에서이 기사:

Thunderbird에는 스크립팅 기능이 없습니다.

동일한 기사에서는 실제로 메일박스 파일에서 직접 읽을 것을 제안하고 X-Mozilla-Status이미 수행 중인 작업을 확인하십시오(분명히 예상대로 작동하지 않는 것 같습니다.) X-Mozilla-Status헤더 및 mbox 형식에 대한 추가 지침을 보려면 해당 기사를 참조하십시오. 우리가 수행 중인 콘텐츠 그들의 지시와 일치합니다.

또 다른 가능성은 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

관련 정보