You’ve got email! (versión Python)

Acá les muestro un simple notificador de correo con Python.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys, libgmail
 
def main():
    if len(sys.argv) >= 3:
        g = libgmail.GmailAccount(sys.argv[1], sys.argv[2])
        try:
            g.login()
        except libgmail.GmailLoginFailure:
            print 'Login incorrecto'
        else:
            unread = g.getUnreadMsgCount()
            if unread:
                import pynotify, gtk
                pynotify.init('Gmail notify')
                pynotify.Notification('Gmail', '%d mensajes sin leer' % unread,
                    gtk.STOCK_DIALOG_INFO).show()
 
if __name__ == '__main__':
    main()

En la primera línea estoy importando el módulo libgmail porque uso Gmail. Si usan Ubuntu, pueden instalar esta librería con sudo apt-get install python-libgmail.

Alternativamente pueden obtener un XML en formato Atom a través de https://mail.google.com/mail/feed/atom (van a necesitar algo como urllib2.HTTPPasswordMgrWithDefaultRealm).

Como es un script que se ejecuta desde la línea de comandos, sys.argv[1] será mi nombre de usuario y sys.argv[2] mi contraseña.

Si en mi cuenta hay correo no leído (línea 12), importo pynotify y gtk (porque uso Gnome) para mostrar un mensaje en mi pantalla:

notificacion

Dos cosas a tener en cuenta:

  • En el ejemplo utilizo sys.argv para obtener el nombre de usuario y la contraseña, pero tengan en cuenta que esa información queda almacenada en ~/.bash_history o en otros logs del sistema. Es preferible definir dos variables dentro del script
  • Pueden hacer que el script corra periódicamente utilizando cron. Por ejemplo: */1 * * * * /usr/bin/python2.5 /path/al/script.py usuario@gmail.com contraseña

4 pensamientos en “You’ve got email! (versión Python)

  1. Copiá el código en un archivo nuevo (mail.py, por ejemplo) y, desde una terminal de comandos, escribí: python mail.py usuario contraseña (reemplazá por lo que corresponda).

    Saludos

  2. funciona..!
    no quiero ser molesto, pero ahora me dice 5000msj nuevos…sera que piensa que todos los mails son nuevos?

  3. a) Si dice “mensajes nuevos”, algo está mal, porque debería ser “mensajes sin leer” :-)
    b) el método getUnreadMsgCount() lo que hace es devolverte la cantidad de mensajes no leídos (que no necesariamente tienen que ser nuevos, pueden ser de hace mucho tiempo)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">