如何从Web应用程序访问用户的Gmail帐户?

问题描述:

我正在用PHP构建一个CRM Web应用程序,该应用程序将从用户的所有电子邮件和社交媒体帐户中提取,并允许他们阅读并回复所有电子邮件或撰写新电子邮件。目前,我只是试图使用OAuth 1.0与Gmail合作,但我遇到了一些麻烦。如何从Web应用程序访问用户的Gmail帐户?

我可以成功获取请求令牌和授权令牌,一旦用户授权我,Google会重定向回我的应用程序,就像它应该...但现在我该如何真正从用户的收件箱中提取消息? This link表示我需要使用用户的电子邮件访问其收件箱,但如何获取用户的电子邮件地址? Google对我返回的oauth_verifier和oauth_token有什么用处?

+0

难道你不会从用户那里得到它吗?我不明白你的意思。如果我理解正确,那么您就可以构建更基本的Outlook Web Access。那么你不应该有用户的电子邮件(因为,你知道,他会需要它来设置)? – Palladium 2012-07-27 20:41:14

+0

主要问题,亚伦,你没有显示任何代码。向我们展示您迄今为止所尝试的内容,以便我们有一个参考点,在该参考点中我们可以指导您到需要去的地方。否则,你要求我们从头开始,给你提供信息,你会不必要地回应“你好,但我知道艾瑞迪!”。点击[编辑]链接将缺少的信息添加到您的问题。祝你好运! :) – jmort253 2012-07-27 20:42:36

+0

不,用户永远不会在我的应用程序中输入他们的电子邮件或密码,我想保持这种方式。根据我的理解,这就是OAuth的观点。用户点击我网站上的一个链接,将其发送到他们登录的Google页面,然后Google重定向到我的应用程序并使用他们登录帐户的访问令牌。像context.io和nimble.com这样的网站这样做,所以我知道这是可能的。 – 2012-07-27 20:48:27

我想通了。有两个步骤:

首先,在实际访问任何用户信息之前,必须将请求令牌升级为访问令牌。这是OAuth流程的第三步(谷歌页面上的用户授权是第二步);我对最后一步是什么感到困惑,并且感觉用户正在完成Google页面上的第二步和第三步。 Google's OAuth Playground帮助明确了。无论如何,在Google(或您的服务提供商)将用户重定向回您的应用之后,您可以使用oauth_verifier和oauth_token将请求令牌升级为Access令牌。不要忘记使用您的oauth_token_secret(除了您的consumer_secret_key)来为最后一个请求生成签名!这个小细节花了我很多时间!有关如何正确执行此操作的更多信息,请参阅this question的答案。

现在,如果您和我一样,并希望让Google处理用户使用哪个电子邮件地址进行登录(而不是将这些信息自己收集到您的应用中),则您需要提出其他请求才能访问用户的收件箱。在我看来,这是Google文档真正失败的地方,因为您似乎需要用户的Google ID(gmail地址)才能使用他们的任何API,但是可以完成OAuth进程,而无需从用户那里获取。这就是我的困惑,也是我的问题。我还没有100%清楚你应该怎么做,但我现在所做的是将'https://www.google.com/m8/feeds/'添加到我的示波器,并调用'https://www.google.com/m8/feeds/contacts/default/full?max-results=0'以获得一个空的xml联系人列表,该列表碰巧包含用户的Gmail地址。然后,您可以解析XML以获取用户的电子邮件并开始您的快乐方式。使用'https://www.googleapis.com/auth/userinfo#email'作用域来获取用户的电子邮件也是可能的(也可能是最好的),但我还没有尝试过。