Joe*_*Joe 5 python gmail imap oauth
在Python Web应用程序中,我可以使用OAuth和IMAP连接到Gmail.OAuth使用您当前登录的任何Google帐户,并要求您授予对该网络应用的访问权限.但是,它不提供实际检索该帐户的电子邮件地址的API.
问题是,即使用户使用OAuth授予访问权限,要与Gmail进行交互,您仍需要在IMAP连接网址中明确提供电子邮件地址:
https://mail.google.com/mail/b/[your-email]/imap/
Run Code Online (Sandbox Code Playgroud)
因此,Web应用程序必须询问用户他们的电子邮件地址,并要求他们通过OAuth授予Gmail访问权限.更糟糕的是,他们输入的电子邮件地址可能与他们授予访问权限的帐户的电子邮件不匹配,从而导致应用程序失败.
有没有办法使用OAuth获取您的电子邮件地址,以便您可以将其放入该URL而无需向用户询问?我试着看看这个答案,但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
Run Code Online (Sandbox Code Playgroud)
您还需要请求联系人范围的许可:
https://www.google.com/m8/feeds/
Run Code Online (Sandbox Code Playgroud)
完成后,您可以发出类似于以下内容的 GET 请求:
https://www.google.com/m8/feeds/contacts/default/full?max-results=1
Run Code Online (Sandbox Code Playgroud)
这应该返回一堆 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>
Run Code Online (Sandbox Code Playgroud)
如您所见,您可以在几个地方找到授权用户的电子邮件。
如果您使用 OAuth,您可能还想看看 Google OAuth Playground,我发现它非常方便: http: //googlecodesamples.com/oauth_playground/index.php。如果您决定使用 OAuth2, https://code.google.com/oauthplayground上有等效工具
| 归档时间: |
|
| 查看次数: |
1884 次 |
| 最近记录: |