在Chrome扩展程序中使用Gmail API发送电子邮件时获得401状态

时间:2018-08-10 12:38:08

标签: javascript google-chrome-extension xmlhttprequest gmail-api

我正在从Gmail API“获取”方法获取草稿的原始数据,并使用Gmail API“发送”方法将其发送。

'var url = 'https://www.googleapis.com/gmail/v1/users/me/messages/id?
     format=raw&alt=json&access_token=' + token;
 url = url.replace("id", emailId);
 var x = new XMLHttpRequest();
 x.open('GET', url , true);
 x.send();
 x.onload = function() {
     var jsonRes = JSON.parse(x.response);
     sendEmail(jsonRes.raw);
 }


function sendEmail(raw) {
    if (raw) {
        var request = new XMLHttpRequest();
        var url = 'https://www.googleapis.com/gmail/v1/users/me/messages/send?alt=json&access_token=' + token;
        params = "raw=" + raw;
        request.open('POST', url , true);
        request.setRequestHeader("Authorization", "Bearer " + token);
        request.setRequestHeader("Content-type", "application/json");
        request.send(params);
        request.onload = function() {
            if (200 === request.status) {
                alert("Email sent successfully");
        }
    }
}`

我正在获得401状态。

如果我是从API page本身发送原始数据,则发送成功。因此原始数据是正确的。

我在发送电子邮件时丢失了一些东西。请帮忙!

2 个答案:

答案 0 :(得分:0)

401错误表示“凭据无效”,最有可能是因为您的令牌已过期或无效。

Google API资源管理器和Google Javascript libraries(通常)会为您处理令牌,但是如果您直接使用XMLHttpRequest()调用服务端点,则必须自己管理令牌

如果您想走这条路,则必须执行以下详细信息:https://developers.google.com/identity/protocols/OAuth2

您可以在“ Oauth2游乐场”中尝试尝试:https://developers.google.com/oauthplayground/

答案 1 :(得分:0)

感谢您的所有答复。

我使用以下代码发送了电子邮件-

function sendEmail(raw) {
     if (raw) {
         var request = new XMLHttpRequest();
         var url = 'https://www.googleapis.com/gmail/v1/users/me/messages/send';
         var params = JSON.stringify({'raw': raw});
         request.open('POST', url , true);
         request.setRequestHeader("Authorization", "Bearer " + token);
         request.setRequestHeader("Content-type", "application/json");
         request.send(params);
         request.onload = function() {
             if (200 === request.status) {
                 alert("Email sent successfully");
             }
         }
    }
}

我纠正了两个错误-
1.令牌是通过URL和标头发送的。它只能在标题中发送。
2.原始参数以字符串形式发送,但应作为JSON对象发送。