I don't have much experience with imaplib and for a few days can't manage to get properly, I followed also some tutorial but also met few problems. What I want is to get email addresses from emails I do have in gmail inbox. The code below gets them but then pops an error. When I change the part "for i in range()" as in commented line it gets just the last email.
Anybody familiar here with imaplib? import getpass, imaplib import email from email.header import decode_header M = imaplib.IMAP4_SSL('imap.gmail.com') M.login(u, p) M.select() status, messages = M.select("INBOX") di={} # number of top emails to fetch N = 100 # total number of emails messages = int(messages[0]) for i in range(messages, messages-N,-1): #for i in range(messages, N): # fetch the email message by ID res, msg = M.fetch(str(i), "(RFC822)") for response in msg: if isinstance(response, tuple): # parse a bytes email into a message object msg = email.message_from_bytes(response[1]) From, encoding = decode_header(msg.get("From"))[0] if isinstance(From, bytes): From = From.decode(encoding) print("From:", From) print(type(From)) print("="*100) if '<'in From: s = From.index('<') d = From.index('>') q = From[s + 1:d] w = From[0:s - 1] if q in di.values(): pass else: di[w] = q else: if q not in di.values(): b = sum(1 for key in di if key.startswith('Friend')) di[f'Friend{b+1}']=From # close the connection and logout M.close() M.logout() print(di) for i in di.keys(): if 'Friend' in i: print(From,'\n',i,di[i]) b = sum(1 for key in di if key.startswith('Friend')) print(b) raise self.error('%s command error: %s %s' % (name, typ, data)) imaplib.error: FETCH command error: BAD [b'Could not parse command'] Process finished with exit code 1 ======================== -- https://mail.python.org/mailman/listinfo/python-list