python - 使用 Oauth 对 Gmail 进行身份验证后,有没有办法获取您的电子邮件地址?

标签 python oauth gmail imap

在 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/&quot;CEcMRX0_eCp7ImA9WhdRF00.&quot;">
<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/

相关文章:

python - 无法调用canvas.show()

python - 执行外部应用程序并向其发送一些关键事件

python - py2neo.WriteBatch 如何工作?

python - 索引错误: list index out of range

OAUTH - 从 LinkedIn 请求经过验证的电子邮件地址

ios - 如何使用 iOS SDK 从 Facebook 获取长期访问 token ?

swift - 带有 Dexcom API : get output frames failed, 状态 8196 的 OAuthSwift

gmail - Basecamp 如何将 "View on Basecamp"链接添加到 Gmail?

google-chrome - 使用 Chrome 身份验证访问 Chrome 扩展中的 gmail api

android - 如何获取环聊消息记录的时间戳?