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 Responses to “You’ve got email! (versión Python)”


  • mmm no me funciona o no se como hacerlo funcionar

    sys.argv[usuario], sys.argv[****]

    asi es?

  • 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

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

  • 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)

Leave a Reply




This work by Patricio Molina is licensed under a Creative Commons Attribution-ShareAlike 2.5 Argentina.