diff --git a/.gitignore b/.gitignore index 724510c..6f171cb 100644 --- a/.gitignore +++ b/.gitignore @@ -29,8 +29,5 @@ nosetests.xml # Translations *.mo -# Mr Developer -.mr.developer.cfg -.project -.pydevproject +example.* example.py diff --git a/example.py b/example.py deleted file mode 100644 index f5ce304..0000000 --- a/example.py +++ /dev/null @@ -1,13 +0,0 @@ -import sys -sys.path.insert(0, '/home/martin/mailbox') - -from mailbox import MailBox - -mailbox = MailBox('imap.gmail.com', - username='username', - password='password') - -unread = mailbox.get_unread() - -for message in unread: - print message.json() \ No newline at end of file diff --git a/mailbox/__init__.py b/mailbox/__init__.py index 7c9d82d..7b9cde3 100644 --- a/mailbox/__init__.py +++ b/mailbox/__init__.py @@ -1,3 +1,4 @@ +import email from mailbox.imap import ImapTransport class MailBox(object): @@ -8,5 +9,39 @@ class MailBox(object): self.connection = server.connect(username, password) + + def parse_email(self, raw_email): + + email_message = email.message_from_string(raw_email) + headers = dict(email_message.items()) + + maintype = email_message.get_content_maintype() + + message = [] + + if maintype == 'multipart': + for part in email_message.get_payload(): + if part.get_content_maintype() == 'text': + message.append(part.get_payload(decode=True)) + elif maintype == 'text': + message.append(email_message.get_payload(decode=True)) + + return { + 'message': message, + 'headers': headers, + 'maintype': maintype + } + + def get_unread(self): + + result, data = self.connection.uid('search', None, "ALL") # search and return uids instead + latest_email_uid = data[0].split()[-1] + result, data = self.connection.uid('fetch', latest_email_uid, '(RFC822)') + + raw_email = data[0][1] + + print self.parse_email(raw_email) + + return {} \ No newline at end of file diff --git a/mailbox/imap.py b/mailbox/imap.py index 05c4a4f..cc46fff 100644 --- a/mailbox/imap.py +++ b/mailbox/imap.py @@ -17,8 +17,16 @@ class ImapTransport(object): if not self.port: self.port = 143 + + def list_folders(self): + return self.server.list() + def connect(self, username, password): self.server = self.transport(self.hostname, self.port) typ, msg = self.server.login(username, password) + self.server.select() + return self.server + +