Menno Smits
http://imapclient.freshfoo.com/
S: * OK Dovecot ready. C: a1 LOGIN MyUsername MyPassword S: a1 OK Logged in. C: a2 LIST "" "*" S: * LIST (\HasNoChildren) "." "INBOX" S: a2 OK List completed. C: a3 SELECT INBOX S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) S: * 1 EXISTS S: * 1 RECENT S: * OK [UNSEEN 1] First unseen. S: * OK [UIDVALIDITY 1257842737] UIDs valid S: * OK [UIDNEXT 2] Predicted next UID S: a3 OK Select completed.
C: a4 FETCH 1 BODY[] S: * 1 FETCH (BODY[] {199} S: Return-Path: sender@example.com S: From: sender@example.com S: Subject: Test message S: To: recipient@example.com S: Message-Id: <20040120203404.CCCC18555.mx1.example.com@C.example.com> S: S: This is a test message. S: ) S: a4 OK Fetch completed. C: a5 LOGOUT S: * BYE Logging out S: a5 OK Logout completed.
server = imaplib.IMAP4_SSL("some.where")
resp, data = server.login("username", "sekrit")
if resp != "OK":
raise IOError("login failed: " + data[0])
resp, data = server.select("INBOX")
if resp != "OK":
raise IOError("select failed: " + data[0])
resp, data = server.uid("SEARCH", "NOT DELETED")
if resp != "OK":
raise IOError("search failed: " + data[0])
# data will look something like: ["1 2 23"]
messages = [int(m) for m in data[0].split()]
server = imapclient.IMAPClient("some.where", ssl=True)
server.login("username", "sekrit")
server.select_folder("INBOX")
messages = server.search(["NOT DELETED"]) # e.g. [1, 5, 23]
resp, data = server.fetch(1, "(INTERNALDATE BODY RFC822)")
if resp != "OK":
raise IOError("fetch failed: " + data[0])
('OK', [('1 (
INTERNALDATE "10-Mar-2014 18:23:04 -0400"
BODY (("TEXT" "PLAIN" ("CHARSET" "ISO-8859-1") NIL NIL "7BIT" 1316 47)("TEXT" "HTML" ("CHARSET" "ISO-8859-1") NIL NIL "QUOTED-PRINTABLE" 2163 48) "ALTERNATIVE")
RFC822 {5759}',
'Return-Path: <foo@bar.com>\r\nX-Original-To: menno@freshfoo.com\r\n...'),
')'])
msgdata = server.fetch(1, ["INTERNALDATE", "BODY", "RFC822"])
{1: {
'BODY': ([('TEXT', 'PLAIN', ('CHARSET', 'ISO-8859-1'), None, None, '7BIT', 1316, 47), ('TEXT', 'HTML', ('CHARSET', 'ISO-8859-1'), None, None, 'QUOTED-PRINTABLE', 2163, 48)], 'ALTERNATIVE'),
'INTERNALDATE': datetime.datetime(2014, 3, 11, 11, 23, 4),
'RFC822': 'Return-Path: <foo@bar.com>\r\nX-Original-To: menno@freshfoo.com\r\n...',
'SEQ': 1
}
}