This site will have limited functionality while we undergo maintenance to improve your experience. If an article doesn't solve your issue and you want to ask a question, we have our support community waiting to help you at @FirefoxSupport on Twitter and/r/firefox on Reddit.

Search Support

Avoid support scams. We will never ask you to call or text a phone number or share personal information. Please report suspicious activity using the “Report Abuse” option.

Learn More

how to get number of new messages ?

more options

Hi, I'm writing an OS extension (in Gnome) to display an icon whenever there are unread or new messages.

Getting the number of unread messages is straightforward, I just have to count the number of "X-Mozilla-Status: 0000" in the Inbox files.

But is there a similar way to get the number of new messages ?

According to https://vincent.bernat.ch/en/x-mozilla-status, there's "X-Mozilla-Status2", which should be "00010000" for new messages. But all my messages, including the new ones, have "00000000".

Hi, I'm writing an OS extension (in Gnome) to display an icon whenever there are unread or new messages. Getting the number of unread messages is straightforward, I just have to count the number of "X-Mozilla-Status: 0000" in the Inbox files. But is there a similar way to get the number of new messages ? According to https://vincent.bernat.ch/en/x-mozilla-status, there's "X-Mozilla-Status2", which should be "00010000" for new messages. But all my messages, including the new ones, have "00000000".

Chosen solution

If someone else stumbles upon this post and has the same need :

No need to reinvent the wheel, but sometimes existing wheels are not that easy to find. Finally I found what I was looking for : https://github.com/Ximi1970/systray-x

It comes with a TB extension, which allows it to get the new messages in real time from within TB

Works well on my laptop (Debian 11 / Gnome 3.38)

Read this answer in context 👍 0

All Replies (8)

more options

Hello

I'm sure that you will have now found out that this flag is not saved:

grep -r nsMsgMessageFlags::New * mailnews/db/msgdb/src/nsMsgHdr.cpp: m_flags &= ~nsMsgMessageFlags::New; // don't get new flag from MDB mailnews/db/msgdb/src/nsMsgHdr.cpp: // don't write out nsMsgMessageFlags::New to MDB.

more options

@gp I'm not sure what you are trying to tell me... A detail I should probably have mentioned : I use a POP3 account.

Grepping my Inbox file with nsMsgMessageFlag yields no result (nor with nsMsg, for that matter).

In other words : grep nsMsg /path/to/Inbox returns nothing.

more options

What I am saying is that you are relying on an unofficial documentation, and you are concluding that Thunderbird is not conforming to this 'documentation', while in reality there was never any contract that the mail files were including the information you need. In other words, it's probably not possible to do what you want by reading the mail files. I say 'probably' because I did not consider the possibility that other flags may help you to get this information. And there is no reason that the mail files include names used in the source code. The code is compiled and then the object result manages the mail files. No relation at all.

more options

>>it's probably not possible to do what you want by reading the mail files

It is possible, kind of. Right now I rely on the index file's atime (access time) attribute, but I was wondering if there was a better way to do that.

What I do now :

I noticed that whenever I access the inbox, Inbox.msf'a atime is updated, but not Inbox's atime (unless of course I alter the inbox)

So, basically :

  • If the last email in the inbox is unread (e.g., if it has "X-Mozilla-Status: 0000") AND if Inbox and Inbox.msf's atime are identical (or close, a few seconds of difference), THEN it means I have NEW messages in Inbox
  • If the last email in Inbox file is already read, (X-Mozilla-Status: 0001), then obviously I have NO NEW messages
  • And if the last email in Inbox file is unread, BUT Inbox.msf's atime is later than Inbox's atime, THEN it means that I opened the inbox since the arrival of the last email, so I have NO NEW messages, although the last one is still unread.

The last condition is not 100% accurate though, because on some rare occasions the Inbox.msf's atime is updated even though I didn't open the inbox. I guess it's due to some behind-the-scene housekeeping of TB. But it's not frequent, I noticed it once in 2 days, so it's still a fairly reliable way to do it, although not perfect.

more options

> I did not consider the possibility that other flags may help you to get this information

No, it appears that's not the case. I just did a diff between two versions of the inbox file, with and without new messages, there are no differences. So TB probably stores this info in its own code, not in the mail files. Only the read/unread status is stored in the mail files.

more options

chentaocredungtao said

>>it's probably not possible to do what you want by reading the mail files It is possible, kind of. Right now I rely on the index file's atime

Well, atime is not known to be universally supported on all Linux computers so I'm not sure that it's a good choice to base a software plugin on it.

more options

Suluhisho teule

If someone else stumbles upon this post and has the same need :

No need to reinvent the wheel, but sometimes existing wheels are not that easy to find. Finally I found what I was looking for : https://github.com/Ximi1970/systray-x

It comes with a TB extension, which allows it to get the new messages in real time from within TB

Works well on my laptop (Debian 11 / Gnome 3.38)

more options

gp said

it's probably not possible to do what you want by reading the mail files

I agree, and I am quite convinced now that the "new" state of a message is internal to TB's process. What makes me say that is that, if you have new messages and you restart TB, there are no more new messages.

Which explains why the only tools that I know of and that are able to reliably display the new messages count rely on a TB extension.