Android: Leer correos de Gmail

3
12768

Android: Leer correos de Gmail

  1. Introducción
  2. Captura de pantalla de la aplicación a construir
  3. Código fuente del ejemplo
  4. Otros métodos y consideraciones

Introducción

Este tutorial os voy a proporcionar un ejemplo de como acceder a los correos electrónicos de Gmail desde vuestras aplicaciones Android sin tener que solicitar al usuario la contraseña de su cuenta de correo.

Para empezar te diré, que no necesita acceder a Internet, es decir, que los correos están ya descargados por el cliente de correo que tiene preinstalado Android y configurado.

Este tutorial surge como apoyo al lector después de realizar muchos esfuerzos e investigaciones para crear mi aplicación Haaala!

Captura de pantalla de la aplicación a construir

Es una aplicación sencilla (didáctica), un botón que al hacer clic en el se ejecuta una tarea que accede al correo electrónico y muestra el asunto de los correos recibidos en desde una determinada fecha.

Código fuente del ejemplo

Puedes descargarte el código fuente haciendo clic aquí

Manos a la obra..

Ventana principal de la aplicación:

Contrato de comunicación entre actividad y tarea en background (tampoco haría falta hacerlo así, hay otras muchas formas de comunicación..)

Tarea que accede a través de consultas a un Content Provider a los datos de Gmail:

Si quieres más información sobre posibles parámetros de todo, busca en Google información sobre Gmail.java ContentProvider

Objeto de negocio que nos construye la tarea desde el contenido de un correo electrónico

El archivo de configuración de la aplicación: AndroidManifest.xml

La ventana principal de la aplicación

Otros métodos y consideraciones:

Los usuarios son muy reticentes a proporcionar sus contraseñas de acceso a servicios tan importantes como Gmail, Facebook, etc…
un método que cada vez está más extendido es el de usar el protocolo OAuth (o en caso de Google, además los protocolos propietarios: AuthSub y ClientLogin) para conceder a las aplicaciones
determinados privilegios de acceso a los datos.

En el caso de Google, actualmente hay un rico API sobre muchos de sus Servicios (Google Maps, Latitude, Contacts, Picasa, etc.) los cuales encapsulan (wrapper) los datos que nos proporcionan las invocaciones a los servicios
exportados en la nueva arquitectura que está migrando Google, de hecho existe un API en fase Beta.

El servicio de Gmail es un tanto especial, pues no hay un API del mismo tipo que para los otros servicios, pero si que hay distintas formas de acceso. He investigado bastante y conseguido acceso por todos los métodos y he visto en todas ellas las siguientes limitaciones:

  • ¿A través de OAuth (v1 o v2)? » Sólo podremos acceder a un flujo de datos ATOM en donde podemos obtener el número de mensajes no leídos, los asuntos, un fragmento del cuerpo, la fecha y el emisor.
  • API para acceder a IMAP y SMTP via Oauth, potente pero hay que hacer muchos pasos en donde se necesitan conocimientos técnicos, por lo que no lo veo
    viable para aplicaciones de uso general.
  • ¿El AccountManager de Android? » El AccesToken sólo nos vale para conseguir el flujo ATOM.. es decir limitado para Gmail.
  • ¿Pedirle los datos de acceso al usuario? Pues entonces sin problemas, tienes aceso por JavaMail a todo (envio, recepción, etc.), claro otra cosa es que el usuario quiera ponerla en la aplicación :-).

Bueno, espero que os sea de utilidad.

Un saludo. Carlos García

3 Comentarios

  1. Dependiendo de vuestra versión de Android, Google a cancelado los permisos de lectura de GMail, produciendose la siguiente excepción:

    Permission Denial: opening provider com.google.android.gm.provider.MailProvider…

    requires. com.google.android.gm.permission.READ_GMAIL or com.google.android.gm.permission.WRITE_GMAIL.

    Está explicado en:
    http://groups.google.com/a/googleproductforums.com/forum/#!category-topic/gmail/reading-and-receiving-messages/XD0C4sw9K7U

  2. Hola Carlos,tengo una tablet Pacal 2,quiero leer el Gmail(tiene Android 4)normal de Google y no puedo,me sale el Gmail de Android,te agradecería ,me echases una mano,gracias y enhorabuena.

  3. Buen día!
    Intenté implementar su código ya que necesito algo parecido para una función dentro de mi aplicación de proyecto de titulación. Sin embargo, al ejecutarla, presiono el botón «GMAIL MENSAJES» y me aparece esto: «java.lang.SecurityException:Permission Denial:opening provider….» tal cual lo escribes en un comentario superior; ya intenté cambiar los permisos, pero me aparece el mismo.
    Me serviría muchísimo cualquier ayuda o explicación del programa, de preferencia lo más pronto posible.
    De antemano, muchas gracias 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here