在 Python Web 应用程序中,我能够使用 OAuth 和 IMAP 连接到 Gmail。 OAuth 使用您当前登录的任何 Google 帐户,并要求您授予对网络应用程序的访问权限。但是,它不提供 API 来实际检索该帐户的电子邮件地址。
问题是,即使用户通过 OAuth 授予访问权限,以与 Gmail 交互,您仍然需要在 IMAP 连接 URL 中明确提供电子邮件地址:
https://mail.google.com/mail/b/[your-email]/imap/
因此,Web 应用程序必须向用户询问他们的电子邮件地址,并要求他们使用 OAuth 从 Gmail 授予访问权限。更糟糕的是,他们输入的电子邮件地址可能与他们授予访问权限的帐户的电子邮件地址不匹配,从而导致应用程序失败。
有没有办法使用 OAuth 获取您的电子邮件地址,以便您可以将其放入该 URL 中而无需询问用户?我试着看 this answer但谷歌返回
Bad Request
每当我同时使用 https://mail.google.com/
和 https://www.googleapis.com/auth/userinfo#email
作为我的范围。
最佳答案
您想要的是 Google Contacts API .如果您通过 OAuth 授权,您目前可能正在请求访问 gmail 范围的权限:
https://mail.google.com/mail/feed/atom
您还需要请求获得联系人范围的许可:
https://www.google.com/m8/feeds/
完成后,您可以发出类似于以下内容的 GET 请求:
https://www.google.com/m8/feeds/contacts/default/full?max-results=1
这应该返回一堆 xml,这里有一些相关的位:
<?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/"CEcMRX0_eCp7ImA9WhdRF00."">
<id>joebloggs@gmail.com</id>
...
<author>
<name>Joe Bloggs</name>
<email>joebloggs@gmail.com</email>
</author>
...
</feed>
如您所见,您可以在几个地方找到授权用户的电子邮件。
如果您正在使用 OAuth,您可能还想看看 Google OAuth 游乐场,我发现它非常方便:http://googlecodesamples.com/oauth_playground/index.php .如果您决定使用 OAuth2,在 https://code.google.com/oauthplayground 处有等效的工具
关于python - 使用 Oauth 对 Gmail 进行身份验证后,有没有办法获取您的电子邮件地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6970794/