diff --git a/README.md b/README.md index dfd1b66..aced522 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Imbox - Python IMAP for Humans ======= -Python library for reading IMAP mailboxes and converting the email content to human readable data +Python library for reading IMAP mailboxes and converting email content to machine readable data Installation ============ @@ -32,6 +32,12 @@ all_messages = imbox.messages() # Unread messages unread_messages = imbox.messages(unread=True) +# Messages sent FROM +messages_from = imbox.mesages(sent_from='martin@amon.cx') + +# Messages sent TO +messages_from = imbox.mesages(sent_to='martin@amon.cx') + for message in all_messages: ........ diff --git a/imbox/__init__.py b/imbox/__init__.py index b4f417c..26f0e14 100644 --- a/imbox/__init__.py +++ b/imbox/__init__.py @@ -1,5 +1,6 @@ from imbox.imap import ImapTransport from imbox.parser import parse_email +from imbox.query import build_search_query class Imbox(object): @@ -9,7 +10,7 @@ class Imbox(object): self.connection = server.connect(username, password) def fetch_by_uid(self, uid): - message, data = self.connection.uid('fetch', uid, '(BODY.PEEK[])') # Don't mark the messages as read + message, data = self.connection.uid('fetch', uid, '(BODY.PEEK[])') # Don't mark the messages as read, save bandwidth with PEEK raw_email = data[0][1] email_object = parse_email(raw_email) @@ -24,16 +25,7 @@ class Imbox(object): def messages(self, *args, **kwargs): - query = "ALL" - - # Parse keyword arguments - unread = kwargs.get('unread', False) - folder = kwargs.get('folder', False) - sent_from = kwargs.get('sent_from', False) - sent_to = kwargs.get('sent_to', False) - - if unread != False: - query = "UNSEEN" + query = build_search_query(**kwargs) message, data = self.connection.uid('search', None, query) diff --git a/imbox/query.py b/imbox/query.py new file mode 100644 index 0000000..4fa0195 --- /dev/null +++ b/imbox/query.py @@ -0,0 +1,20 @@ +def build_search_query(**kwargs): + + # Parse keyword arguments + unread = kwargs.get('unread', False) + sent_from = kwargs.get('sent_from', False) + sent_to = kwargs.get('sent_to', False) + + query = "(ALL)" + + if unread != False: + query = "(UNSEEN)" + + if sent_from: + query = '{0} (FROM "{1}")'.format(query, sent_from) + + if sent_to: + query = '{0} (TO "{1}")'.format(query, sent_to) + + + return str(query) \ No newline at end of file diff --git a/setup.py b/setup.py index 7731b45..fa37960 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup import os -version = '0.5' +version = '0.5.1' def read(filename):