0

Here is my code:

import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('example@gmail.com', 'password')
conn.select()
conn.search(None, 'ALL')
data = conn.fetch('1', '(BODY[HEADER])')
header_data = data[1][0][1]
newdata = header_data.decode('utf-8')
parser = HeaderParser()
msg = parser.parsestr(newdata)
print (msg.keys())
labels = conn.fetch('1:100', (X-GM-LABELS))
print (labels)

When i print out labels, it does print out the x-GM-labels from each email header(which is the folder what the email is in). However, it only prints out Important, and sent x-gm labels. I have around 60 emails in my inbox within the 1:100 range. So, why does it not print out the inbox? it simply prints (). Here is the print out so you can see it properly.

'OK', [b'50 (X-GM-LABELS ())', b'51 (X-GM-LABELS ())', b'52 (X-GM-LABELS ())', b'53 (X-GM-LABELS ())', b'54 (X-GM-LABELS ())', b'55 (X-GM-LABELS ())', b'56 (X-GM-LABELS ())', b'57 (X-GM-LABELS ())', b'58 (X-GM-LABELS ("\\\\Important"))', b'59 (X-GM-LABELS ())', b'60 (X-GM-LABELS ())', b'61 (X-GM-LABELS ())', b'62 (X-GM-LABELS ())', b'63 (X-GM-LABELS ())', b'64 (X-GM-LABELS ())', b'65 (X-GM-LABELS ("\\\\Important"))', b'66 (X-GM-LABELS ())', b'67 (X-GM-LABELS ())', b'68 (X-GM-LABELS ())', b'69 (X-GM-LABELS ())', b'70 (X-GM-LABELS ())', b'71 (X-GM-LABELS ())', b'72 (X-GM-LABELS ())', b'73 (X-GM-LABELS ())', b'74 (X-GM-LABELS ("\\\\Important"))', b'75 (X-GM-LABELS ("\\\\Important"))', b'76 (X-GM-LABELS ())', b'77 (X-GM-LABELS ("\\\\Important"))', b'78 (X-GM-LABELS ())', b'79 (X-GM-LABELS ("\\\\Important"))', b'80 (X-GM-LABELS ("\\\\Important"))', b'81 (X-GM-LABELS ("\\\\Important"))', b'82 (X-GM-LABELS ())', b'83 (X-GM-LABELS ())', b'84 (X-GM-LABELS ())', b'85 (X-GM-LABELS ("\\\\Important"))', b'86 (X-GM-LABELS ())', b'87 (X-GM-LABELS ())', b'88 (X-GM-LABELS ())', b'89 (X-GM-LABELS ())', b'90 (X-GM-LABELS ())', b'91 (X-GM-LABELS ())', b'92 (X-GM-LABELS ())', b'93 (X-GM-LABELS ())', b'94 (X-GM-LABELS ())', b'95 (X-GM-LABELS ())', b'96 (X-GM-LABELS ())', b'97 (X-GM-LABELS ("\\\\Important"))', b'98 (X-GM-LABELS ())', b'99 (X-GM-LABELS ())', b'100 (X-GM-LABELS ("\\\\Important"))'])

So b'50 should be:

b'50 (X-GM-LABELS (\\\\Inbox))

but instead its just:

b'50 (X-GM-LABELS ())'

1 Answers1

1

In my testing the currently selected mailbox is always excluded from the X-GM-LABELS results. When you called conn.select() it implicitly selected 'INBOX', therefore excluding 'Inbox' from the list of labels.

If you selected a different mailbox then you would see '\\\\Inbox' in your results:

conn.select("[Gmail]/All Mail")
conn.fetch('1:100', '(X-GM-LABELS)')

Results in:

('OK', ['21 (X-GM-LABELS ("\\\\Inbox"))'])
JosiahDaniels
  • 2,411
  • 20
  • 37