Hi,
I'm about to do stuff with emails on an IMAP server and wrote a program
using imaplib which, so far, gets the UIDs of the messages in the inbox:
#!/usr/bin/python
import imaplib
import re
imapsession = imaplib.IMAP4_SSL('imap.example.com', port = 993)
status, data = imapsession.login('user', 'password')
if status != 'OK':
print('Login failed')
exit
messages = imapsession.select(mailbox = 'INBOX', readonly = True)
typ, msgnums = imapsession.search(None, 'ALL')
message_uuids = []
for number in str(msgnums)[3:-2].split():
status, data = imapsession.fetch(number, '(UID)')
if status == 'OK':
match = re.match('.*\(UID (\d+)\)', str(data))
message_uuids.append(match.group(1))
for uid in message_uuids:
print('UID %5s' % uid)
imapsession.close()
imapsession.logout()
It's working (with Cyrus), but I have the feeling I'm doing it all wrong
because it seems so unwieldy. Apparently the functions of imaplib
return some kind of bytes while expecting strings as arguments, like
message numbers must be strings. The documentation doesn't seem to say
if message UIDs are supposed to be integers or strings.
So I'm forced to convert stuff from bytes to strings (which is weird
because bytes are bytes) and to use regular expressions to extract the
message-uids from what the functions return (which I shouldn't have to
because when I'm asking a function to give me a uid, I expect it to
return a uid).
This so totally awkward and unwieldy and involves so much overhead that
I must be doing this wrong. But am I? How would I do this right?
--
https://mail.python.org/mailman/listinfo/python-list