Question

So, Gmail's IMAP is a bit 'weird'. They use IMAP folders to represent Labels. I believe typically that an email in IMAP can only belong to one 'Folder', however with Gmail, an email message can belong to many 'folders' which gives us very close functionality to labels.

My question is, I'm writing a gmail client (so that things like Starring, deleting, and archiving work a bit more intuitively than a standard imap client), but I would like to be able to display for a given email, which folders (labels) it is in.

As far as I can tell this is not easy (I'd have to loop through every message in every folder to see which ones it's in).

Does anyone know of a tidy way to do this? Or am I right in assuming there's no easy way?

Was it helpful?

Solution

Gmail provides a set of IMAP extensions to allow authors of IMAP clients provide a more Gmail-like experience through IMAP. See Gmail IMAP Extensions (X-GM-EXT-1).

To fetch the labels for a specific message you can call the IMAP FETCH command with the X-GM-LABELS attribute. See Access to Gmail labels: X-GM-LABELS

OTHER TIPS

The most straightforward (though not foolproof) way is to grab the values of the messages' Message-ID headers. Then iterate over the "label" folders and execute IMAP SEARCH along the lines of

A001 SEARCH HEADER MESSAGE-ID "your-msgid-value"

If you get any results back in the untagged SEARCH response, the message has the selected "folder"'s label.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top