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]}"
저는 두 개의 이메일 계정(개인용과 업무용)을 가지고 있습니다. 둘 다 msf
Thunderbird가 정보를 업데이트하는 데 사용하는 별도의 파일을 가지고 있습니다 .
스크립트는 "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