2011-08-07 12 views
5

En una aplicación web de Python, puedo conectarme a Gmail usando OAuth e IMAP. OAuth usa cualquier cuenta de Google en la que esté registrado actualmente de manera simple y le solicita que otorgue acceso a la aplicación web. Sin embargo, no proporciona una API para recuperar realmente la dirección de correo electrónico de esa cuenta.¿Hay alguna manera de obtener su dirección de correo electrónico luego de autenticarse con Gmail usando Oauth?

El problema es que, a pesar de que el usuario otorga acceso con OAuth, para interactuar con Gmail, sigue siendo necesario para proporcionar explícitamente la dirección de correo electrónico en su dirección URL de conexión IMAP:

https://mail.google.com/mail/b/[your-email]/imap/ 

Debido a esto, la web la aplicación debe solicitar al usuario su dirección de correo electrónico y solicíteles que otorguen acceso desde Gmail con OAuth. Lo que es peor es que la dirección de correo electrónico que ingresan puede no coincidir con el correo electrónico de la cuenta a la que otorgan acceso, lo que hace que la aplicación falle.

¿Hay alguna manera de obtener su dirección de correo electrónico con OAuth para que pueda ponerla en esa URL sin pedirle al usuario que la use? Intenté mirar this answer pero Google devuelve un Bad Request cada vez que uso https://mail.google.com/ y https://www.googleapis.com/auth/userinfo#email como mi alcance.

Respuesta

4

Lo que buscas es el Google Contacts API. Si estás autorizando a través de OAuth es probable que actualmente solicitando permiso para acceder al ámbito Gmail:

https://mail.google.com/mail/feed/atom 

También tendrá que pedir permiso para el ámbito contactos:

https://www.google.com/m8/feeds/ 

Una vez que tiene eso, se puede realizar una solicitud GET similar al siguiente:

https://www.google.com/m8/feeds/contacts/default/full?max-results=1 

Esto debería devolver un montón de XML, aquí hay algunos bits relevantes:

<?xml version="1.0" encoding="UTF-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gContact="http://schemas.google.com/contact/2008" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;CEcMRX0_eCp7ImA9WhdRF00.&quot;"> 
<id>[email protected]</id> 
... 
<author> 
    <name>Joe Bloggs</name> 
    <email>[email protected]</email> 
</author> 
... 
</feed> 

Como puede ver, puede encontrar el correo electrónico de los usuarios autorizados en un par de lugares.

Si está utilizando OAuth, es posible que también desee echarle un vistazo al área de juegos Google OAuth, lo encontré muy útil: http://googlecodesamples.com/oauth_playground/index.php. Si decide usar OAuth2 hay una herramienta equivalente en https://code.google.com/oauthplayground

+1

Eso funcionó a la perfección. También el patio de recreo es bastante agradable, ¡gracias por incluir eso! – Joe

+1

Para agregar a esta respuesta, también intenté usar 'max-results = 0' y eso funcionó. Obtiene menos XML de esa manera y todavía tiene acceso a ''. – Joe

Cuestiones relacionadas