Gmail API-在javascript中使用oAuth2.0发送电子邮件

Gmail API-在javascript中使用oAuth2.0发送电子邮件,javascript,oauth,oauth-2.0,google-api,gmail-api,Javascript,Oauth,Oauth 2.0,Google Api,Gmail Api,我正在尝试创建一个只使用javascript和Gmail API发送电子邮件的应用程序。我已经将开发人员控制台设置为使用API,并创建了API密钥和凭据 我已经修改了这个,到目前为止,我想我已经到了加载GMail API的地步。(或..400表示出现问题?)控制台日志显示: POST https://content.googleapis.com/gmail/v1/users/me/messages/send?alt=json 400 (OK) zu @ cb=gapi.loaded_0:85

我正在尝试创建一个只使用javascript和Gmail API发送电子邮件的应用程序。我已经将开发人员控制台设置为使用API,并创建了API密钥和凭据

我已经修改了这个,到目前为止,我想我已经到了加载GMail API的地步。(或..400表示出现问题?)控制台日志显示:

POST https://content.googleapis.com/gmail/v1/users/me/messages/send?alt=json 400 (OK)

zu @ cb=gapi.loaded_0:85
n @ cb=gapi.loaded_0:85
Cu @ cb=gapi.loaded_0:85
(anonymous function) @ cb=gapi.loaded_0:86
g @ cb=gapi.loaded_0:55
c @ cb=gapi.loaded_0:46
当我尝试通过url使用oAuth2.0进行身份验证时:

var code;

$.get("https://accounts.google.com/o/oauth2/auth?scope=email&
  redirect_uri=http://hiro.collegewebserver.com/COSW200/hw13/gmailtest.html&
  response_type=token&client_id=386373199858-o1rt7qj3gt99gbfg6pqpr0g6i92urq9t.apps.googleusercontent.com&
  approval_prompt=force",

  function (returnedValue) { code = returnedValue; });
我得到这个信息:

XMLHttpRequest cannot load https://accounts.google.com/o/oauth2/auth?scope=email&
redirect_uri=http://h…3gt99gbfg6pqpr0g6i92urq9t.apps.googleusercontent.com&
approval_prompt=force.

No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://hiro.collegewebserver.com' is therefore not allowed access.
我读过其他帖子说,这可能是由于跨来源请求被阻止?有人写道有办法解决这个问题,比如使用JSONP


如果有人能告诉我我在这里遗漏了什么,我将非常感激!:)

您不能通过ajax调用Google来获取访问代码。OAuth2的思想是首先将用户重定向到accounts.google.com/o/OAuth2/your_设置。就你而言:

https://accounts.google.com/o/oauth2/auth?scope=email&redirect_uri=http://hiro.collegewebserver.com/COSW200/hw13/gmailtest.html&response_type=token&client_id=386373199858-o1rt7qj3gt99gbfg6pqpr0g6i92urq9t.apps.googleusercontent.com&approval_prompt=force
在这个Google环境中,用户可以使用他/她的帐户登录。您提供的设置之一是重定向uri

由于您在Google Developers控制台中被列为授权重定向URI之一,并且此url与您的客户端id相关,因此除您的网站外,没有其他应用程序可以使用您的客户端id接收授权代码

登录后,用户将被重定向到此重定向uri,代码作为参数之一

这将看起来像这样:

http://hiro.collegewebserver.com/COSW200/hw13/#access_token=yb27…jK0AVtilhnrJDcuTISgIB5LiNtKLMut1kVvPW69w&token_type=Bearer&expires_in=3600
之后,您必须从url中提取访问令牌。使用此访问令牌,您可以授权用户并使用您输入的范围。这可以通过ajax调用来完成

$http({
    method: 'GET',
    url: 'https://www.googleapis.com/upload/gmail/v1/users/userId/messages?access_token=' + access_token
}).then(function(response){
//your code
})
您还可以将access_令牌放在调用的头中:

Authorization: Bearer access_token
另一个选项是使用JavaScript的API客户端库(测试版):


虽然它是测试版,基本工作流程相同,但它可能会给您提供更清晰的示例。

我非常感谢您的详细回答!我现在明白了,您实际上必须首先移动到Google的OAuth url,然后重定向回原始页面。事实上,有人写了一个教程,展示了如何使用弹出窗口来实现这一点,所以我现在就关注它。无论如何,谢谢你的慷慨帮助!:)不客气,很高兴听到这个@morezoom。我希望一切顺利。