Tuesday, 1 September 2009

IMAP PUSH GMail Python Script (for Mac, but easily changable)


So, you need a python script to do something when you get an email (from GMail, for example, but other services that support IMAP4 will work as well). I came across this post when finding out how to do this. It pointed me in the right direction; I didn't have to do much initial thinking/goggling.

A quick explanation as to how the script works:
  1. Connect using IMAP to imap.gmail.com
  2. Send login credentials (encrypted with SSL, don't worry)
  3. Select 'INBOX'
  4. Send IDLE command and wait for mail...
  5. When a message gets to Google's servers, they terminate the IDLE connection. This then signals to our script that a message has been received (or we've timed out)
  6. The script then checks to see if there is new, unseen mail, and, if so, uses growlnotify to let us know the sender and the subject. (This is the bit that can be replaced to do whatever you want it to do. You can get the message body if you want, times, dates, etc... and do whatever with it)
  7. IDLE command is sent again (i.e. back to 4.)
Instead of a growl notification, you could use pySerial to send something to an Arduino and light something, spin something, etc... Feel free to change the code and do whatever to it.

There are two bits of code you'll need: imaplib2.py and my IMAPPush.py

I hosted my IMAPPush.py on Google Sites because I couldn't host it here. All you need to do is put the files in the same directory, cd to said directory and execute:

python IMAPPush.py USERNAME [PASSWORD]

The PASSWORD is not required -- you'll be prompted for it if it is omitted.

To find out more about IMAP IDLE, see it's RFC (RFC 2177) here.

There's no point me explaining how the code works here; if you want to understand how the code works, I've put a lot of comments in the code. That's the best place for explaining the code, after all.

Here are the links to the code again:
  1. http://sites.google.com/site/hmmtheresanidea/files/IMAPPush.py?attredirects=0
  2. http://www.cs.usyd.edu.au/%7Epiers/python/imaplib.html
Any comments, suggestions, etc... please let me know below. Thanks for reading!

UPDATE: links fixed, and code is now licensed.

48 comments:

Anonymous said...

Thanks for publishing this code!
One of the problems I'm having with it is that there is no response timeout checking.
So if the remote imap server reboots the script does not try to re login. Any ideas on how to fix this?

Peter said...

Hi Chris,

What license is this released under? Would really appreciate it if you could add some sort of contact email address so I can get in touch :-)

Cheers,

Pete

chris said...

Hi Peter,

It wasn't before, but I've updated the code so it's now under a MIT/X11 license -- basically, do what you want with it!

I don't really know if this is a good choice for a license, but it seemed to be the most flexible one I came across. It seems pretty compatible with others as well.

What are you doing, or planning to do, with it? I'm curious. It's good to see that it may be of use to someone!


Thanks for commenting,

All the best,


Chris

P.S. I have just added an email address to my profile.

Anonymous said...

I'm using this to get emails from a GMail account and deliver it to trac using email2trac. Thanks a lot!

chris said...

Great! Glad it was of some use!

Johannes said...

This is a beautiful example of IMAP IDLE using Python. This is going to be a lot of help to me while trying to work things out, all those wonderful comments! *drools*

erocm123 said...

Holy crap, this is awesome. I have implemented this into a script I have been using for years and it is working great. My problem is I can't seem to get the thread to die when not running interactively. In your code, the script is run interactively and pressing q followed by enter kills the thread and then exits the script.

My script does not run interactively and when I send sigterm to it with kill {pid} the thread is never notified of the sigterm and it never exits! How can I handle this situation to get everything to exit when I request it to?

sbobet said...

I simply must tell you that you have written an excellent and unique article that I really enjoyed reading. I’m fascinated by how well you laid out your material and presented your views. Thank you.

Timmy Landry said...

I simply must tell you that you have written an excellent and unique article that I really enjoyed reading. I’m fascinated by how well you laid out your material and presented your views. Thank you.

Genf20 said...

I simply must tell you that you have written an excellent and unique article that I really enjoyed reading. I’m fascinated by how well you laid out your material and presented your views. Thank you.

Anonymous said...

I was excited to uncover this website. I wanted to thank you for your time for this wonderful read!!
I definitely enjoyed every little bit of it and I have you
saved to fav to look at new stuff in your blog.

Anonymous said...

I was excited to uncover this website. I wanted to thank you for your time for this wonderful read!!
I definitely enjoyed every little bit of it and I have you saved to fav to look at
new stuff in your blog.

Anonymous said...

I think this is one of the most vital information for me. And i'm glad reading your article.
But wanna remark on few general things, The web
site style is great, the articles is really great :
D. Good job, cheers

Anonymous said...

I think this is one of the most vital information for me.

And i'm glad reading your article. But wanna remark on few general things, The web site style is great, the articles is really great
: D. Good job, cheers

Anonymous said...

Specific i could jeopardize me, and most previous marketing, 2018 - livery for treating viagra online.

Newark condos generic viagra telaflora. Ha come Viagra
do to your blood pressure.

Anonymous said...

Each phone includes an Analog Telephony Adapter (ATA), so only regular modems are requured
that hzve an Ethernet jack. They also offer discounted rates
for those who need to surf the web for longer durations as
well as for night packages. Alternatively, users will be able too back upp their information on i - Cloud.

Anonymous said...

However, what are you going to do if you live
in a rural region and don't have a fast internet connection or anyy connection att all.

Like Verizon, Sprint does not provide nationwide coverage of
Wi - Max; instead, they offer 3G mobile broadband services
for cities lacking Wi - Maax access. Plus e - Readers have
doubled as web browsing devices giving sers to have access to
many oof the most important information from the one device.

Anonymous said...

Before going to see a dealer, it iss also important to do
yoour research oon the price. Behause the signal has to travel so much farther, to a satellite in geostationary orbit from the subscriber and then back to a service
provider who then routes it back to the subscriber, there is
often a delay which can maoe thhe service less effective when bing used for certain purposes.
Wiith this remarkably amazing technology you can make unlimitd affordable calls internationally.

Anonymous said...

Howw can you be sure to find the best possible broadband servixe for your postcode.
Cabl internet is readily aailable if you already have a pay TV subscription, and you should
count yourself fortunate if you live in one of the pivileged areas where fiber
optic internet is available. Sureillance has also increased thanks to the internet.

Anonymous said...

Most service provideers in the developoed countries
are either already providing a Broadband service up to 24Mbps, or will be
in tthe near future, and it will be a version of ADSL2+ that they are using.

The internet iis a great tool to learn what evbents take place each
year and each month in your new city. Plus e - Readers hhave doubled as web browsing devices giving
users to have access tto many of the most important information from the onne device.

Anonymous said...

There are even internet connected devices now tbat stream video annd TV
services to the home entertainment center. The internet is a great tool to learn what events take place each year and each month in your
new city. Once you are satisfied, bbuy yourself a prepaid starter kit, with sim and data.

Anonymous said...

Although for many people a credit or debit card may be the best option, the prepaid card is also a viable option for some.
They also offer discounted rates for those who neeed to surf the web
for longer durations ass well as for night packages. You cannot evenn escape references to broadband in thee news media,
with the government recently announcing plans to get
90 percent off homes and businesses in the UK connected to super-fast broadbaand
by 2015and manyy communities inn rural areas that telecoim companies such
as BT and Virgin Media will not be installing fibre optic cabling declaring their intent to fund their own network upgrades.

Anonymous said...

As the fourth week oof the New Year hovers in the imminent
future, most people have already kicked their New Year's promises and resolutions to the wayside.
Prepaid travel cards are a great option for those wishing to wiithdraw and spend money abroad.
There are many considerations that need to be taken into account
before you staqrt trading.

Anonymous said...

There is a rise in shopping among people who may be having a glass of wine andd then decide to purchase something that
they may not even remember doing later. Make sure that they have backup equipment suchh as multiple transit providers and DHCP servers.

Metro ethernet is simple to use and is relatively easy to install.

On the supplements said...

I simply must tell you that you have written an excellent and unique article that I really enjoyed reading. I’m fascinated by how well you laid out your material and presented your views. Thank you.

Anonymous said...

I'm gone to inform my little brother, that he should also
pay a visit this webpage on regular basis
to get updated from most recent news.

Anonymous said...

I'm gone to inform my little brother, that he should also pay a visit this webpage on regular basis
to get updated from most recent news.

Anonymous said...

It's going to be finish of mine day, however before finish I am reading this wonderful piece of writing to improve my experience.

Anonymous said...

Today, I went to the beachfront with my kids.
I found a sea shell and gave it to my 4 year old daughter and said "You can hear the ocean if you put this to your ear." She put the
shell to her ear and screamed. There was a hermit crab inside and it pinched her ear.
She never wants to go back! LoL I know this is totally off topic but I had to
tell someone!

Anonymous said...

constantly i used to read smaller articles or reviews which as well
clear their motive, and that is also happening with this piece of writing which I am reading at this place.

Anonymous said...

Good post however , I was wondering if you could write a litte
more on this topic? I'd be very thakful if you could elaborate a little bit further.
Thank you!

Anonymous said...

Paragraph writing is also a fun, if you know afterward you can write if not it
is complex to write.

Anonymous said...

Good day! I could have sworn I've visited this website before but after browsing through many of the pposts I realized it's
new to me. Anyhow, I'm definitely pleased I found it and I'll be book-marking it and checking back
regularly!

Anonymous said...

I visit daily some blogs and sites to read posts, but this webpage offers feature based posts.

Anonymous said...

It is the best time to make some plans for the long run and it's
time to be happy. I have read this put up and if I may just I wish
to recommend you some fascinating things or suggestions.
Perhaps you could write next articles referring to this article.
I want to read more things approximately it!

Anonymous said...

Normally I do not learn post on blogs, but I would like to say that this write-up very forced me
to take a look at and do it! Your writing taste has
been surprised me. Thanks, very nice post.

Anonymous said...

Pretty component of content. I simply stumbled upon your site and iin accession capital to asxert that I acquire inn fact loved account your blog posts.
Any way I'll be subscribing in your feeds or even I success yoou get right of entry too
persistently quickly.

Anonymous said...

Terrific post however , I was wondering if you could write a
litte more on this subject? I'd be very thankfu iif you could elaborate a little bit further.
Bless you!

Anonymous said...

I loved as much as you'll receive carried out right here.

The sketch is attractive, your authored material stylish.
nonetheless, you command get bought an shakiness over that you wish be delivering the following.

unwell unquestionably come further formerly again as exactly the same nearly
very often inside case you shield this increase.

Anonymous said...

With havin so much written content do you ever run into any
problems of plagorism or copyright infringement? My site has a lot of unique content I've either written myself
or outsourced but it seems a lot of it is popping it up all over the web without my authorization. Do you
know any methods to help reduce content from being ripped off?
I'd truly appreciate it.

Anonymous said...

Nice post. I was checking constantly this blog and I'm impressed!
Very useful ijformation particularly tthe last part :) I care
for such info a lot. I was seeking this particular information forr a
very long time. Thank you and good luck.

Anonymous said...

Highly descriptive article, I enjoyed that a lot.
Will there be a part 2?

Anonymous said...

Thaks for your personal marvelous posting!
I certainly enjoyed rewding it, you might be a great author.I will be
sure to bookmark your blog and definitely will come
back later in life. I wnt to encourage youu to ultimatey continue your great work, have a nice morning!

Anonymous said...

Greetings! Very helpful advice in this particular post! It's the little changes that will make the most important changes.

Thanks for sharing!

Anonymous said...

Hey there just wanted to give you a brief heads up and let you know a few of
the images aren't loading properly. I'm not sure why but I think its a linking issue.
I've tried it in two different web browsers and both show the same
results.

Anonymous said...

It's very easy to find out any topic on web as compared to books, as I found
this article at this site.

Anonymous said...

What you said was actually very reasonable. However, what about this?

what if you added a little content? I mean, I don't wish to tell you
how to run your blog, however suppose you
added something that grabbed folk's attention? I mean "IMAP PUSH GMail Python Script (for Mac, but easily changable)" is a little vanilla.
You might look at Yahoo's front page and note how they create post
titles to grab viewers to click. You might try adding a video or a picture or two to get
readers interested about everything've got to say.
In my opinion, it could make your website a little bit more interesting.

Anonymous said...

Hi there! I could havfe ssorn I've been to this website before but after reading through ssome of the ppst
I reealized it's new to me. Nonetheless, I'm definitely delighted I foumd it and I'll be book-marking
and checking back often!