Mercurial > public > pelican-blog
diff content/Coding/017-weighmail.rst @ 4:7ce6393e6d30
Adding converted blog posts from old blog.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Thu, 30 Jan 2014 21:45:03 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/content/Coding/017-weighmail.rst Thu Jan 30 21:45:03 2014 -0600 @@ -0,0 +1,69 @@ +Introducing weighmail +##################### + +:date: 2012-05-24 19:30 +:tags: Python, Gmail, IMAPClient, weighmail +:slug: introducing-weighmail +:author: Brian Neal + +Recently my wife approached me and told me that Gmail was warning her that she +was using 95% of her (free) quota. This was a bit surprising, but my wife does a +lot of photography, and sends lots of photos through the mail to various people. +So I began helping her trying to find her large messages. It was then that I +learned that Gmail provides no easy way to do this. You can't sort by size. You +can search for specific attachments, for example .psd or .jpg, and that is what +she ended up doing. + +Surely I thought there must be an easier way. I thought that perhaps Gmail might +have an API like their other products. A bit of searching turned up that the +only API to Gmail is IMAP_. I didn't know anything about IMAP, but I do know +some Python. And sure enough, Python has a library for IMAP called imaplib_. +Glancing through imaplib I got the impression it was a very low-level library +and I began to get a bit discouraged. + +I continued doing some searching and I quickly found IMAPClient_, a high-level +and friendlier library for working with IMAP. This looked like it could work +very well for me! + +I started thinking about writing an application to find big messages in a Gmail +account. The most obvious and natural way to flag large messages would be to +slap a Gmail label on them. But could IMAPClient do this? It didn't look like +it. It turns out that labels are part of a set of `custom Gmail IMAP +extensions`_, and IMAPClient didn't support them. Yet. + +I contacted the author of IMAPClient, `Menno Smits`_, and quickly learned he is +a very friendly and encouraging guy. I decided to volunteer a patch, as this +would give me a chance to learn something about IMAP. He readily agreed and I +dove in. + +The short version of the story is I learned a heck of a lot from reading the +source to IMAPClient, and was able to contribute a patch for Gmail label support +and even some tests! + +After the patch was accepted I went to work on my application, which I have +dubbed weighmail_. I was even able to figure out how to put `weighmail up on +PyPI`_ thanks to Menno's example. + +So if you need a program to categorize your Gmail by message size, I hope +weighmail will meet your needs. Please try it out and feel free to send me +feedback and feature requests on the Bitbucket issue tracker. + +I have used it maybe a half-dozen times on my Gmail account now. My Gmail +account is only about 26% full and I have about 26,300 messages in my "All Mail" +folder. Run times for weighmail have varied from six to 15 minutes when adding 3 +label categories for size. I was (and am) kind of worried that Gmail may lock me +out of my account for accessing it too heavily, but knock on wood it hasn't yet. +Perhaps they rate limit the responses and that is why the run times vary so +much. + +In any event, I hope you find it useful. A big thank you to Menno Smits for his +IMAPClient library, his advice, and working with me on the patch. Hooray for +open source! + +.. _IMAP: http://en.wikipedia.org/wiki/Internet_Message_Access_Protocol +.. _imaplib: http://docs.python.org/library/imaplib.html +.. _IMAPClient: http://imapclient.freshfoo.com/ +.. _custom Gmail IMAP extensions: https://developers.google.com/google-apps/gmail/imap_extensions +.. _weighmail: https://bitbucket.org/bgneal/weighmail/ +.. _weighmail up on PyPI: http://pypi.python.org/pypi/weighmail/0.1.0 +.. _Menno Smits: http://freshfoo.com/blog/