我们有一个针对教育领域的谷歌应用程序,直到最近我们还很高兴使用gmail_xoath和imap让其他用户在门户网页首页上显示未读的电子邮件数量。
我们一直在使用Nicolas在这里找到的优秀gmail_xoauth宝石。
github.com/nfo/gmail_xoauth
我们的代码看起来像这样。
require 'gmail_xoauth'
imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
imap.authenticate('XOAUTH', @email,
:two_legged => true,
:consumer_key => consumer_key,
:consumer_secret => consumer_secret()
)
@messages_count = imap.status('INBOX', ['UNSEEN'])['UNSEEN']
imap.disconnect
请注意我们如何在管理OAuth密钥和此域名的秘密中使用我们从谷歌应用管理员处获得的consumer_key和consumer_secret。
现在我们需要升级到Oauth2。 gmail_xoauth确实支持XOAUTH2,我按照这个过程来测试它。
使用已安装的应用选项在我的Google开发者控制台中创建项目。我已登录谷歌作为我们的谷歌应用程序域的域管理员。
使用此页面https://code.google.com/p/google-mail-oauth2-tools/wiki/OAuth2DotPyRunThrough,发送client_id和client_secret以获取访问令牌。在此过程中,我授权应用程序通过同意屏幕访问我的电子邮件。
将access_token粘贴到此代码中
require 'gmail_xoauth'
@access_token = "access_token"
@email = "my email address"
imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
imap.authenticate('XOAUTH2', @email, @access_token)
@messages_count = imap.status('INBOX', ['UNSEEN'])['UNSEEN']
imap.disconnect
有效,快乐的日子!!
我现在遇到的问题是,如何告诉我的谷歌应用程序域允许该项目访问其他用户的电子邮件数据,而不是问他们是否愿意允许它?
我试过这种方法
以管理员身份登录Google Domain管理员控制台
点击安全
CLick显示更多
点击高级
单击“管理API客户端访问”
输入已创建项目的客户ID
输入IMAP访问范围https://mail.google.com/
完成后,在尝试计算其他用户邮箱中的邮件数时,我仍然会收到无效凭据错误,如其电子邮件地址所示。
我很确定我在某个地方误读了一些文档,而且我做了一些愚蠢的事情,但我似乎无法理解它是什么。
我认为将这样的项目添加到谷歌应用程序域并不是授权应用程序访问域中其他用户数据的正确方法。我已经看过提到的服务帐户,迁移到Oauth2,以及各种其他可能的解决方案,但无法让它们中的任何一个工作。
我真正想知道的是什么建议的方法肯定有效,然后我将专注于此。
如果有人有任何建议提示链接,任何事情,我都会永远感激。
马特
更新1
我一直与Nicolas保持联系,后者是gmail_xoauth gem的创建者,他已确认在其当前状态下,gem不允许使用服务帐户,因此无法访问其他用户的gmail数据我们用于教育领域的谷歌应用程序。
我已经将一些示例Java代码传递给Nicolas,它完成了在我们的教育域谷歌应用程序中访问其他用户的gmail数据,并且他将考虑调整gem以允许这样的机制。
答案 0 :(得分:1)
要授权整个域的应用(“两足OAuth”),您需要创建一个服务帐户。 https://developers.google.com/identity/protocols/OAuth2#serviceaccount和https://developers.google.com/identity/protocols/OAuth2ServiceAccount有文档。您可以在https://code.google.com/p/google-api-ruby-client/wiki/OAuth2使用Ruby库。
答案 1 :(得分:-3)
要成功迁移到XOAUTH2并访问谷歌应用程序中用于教育的其他用户未读邮件计数,这很简单,你真正需要做的就是获取你想要迁移的文件,你选择并将其移动到同一个归档为您的程序。然后尝试再次运行它,它应该工作。
我真的希望这会帮助你解决你的麻烦。 如果没有,我真的很抱歉。
如果这有效,请告诉我:)