首页 > 解决方案 > 在 Chrome 扩展程序中使用 Gmail API 发送电子邮件时获取 401 状态

问题描述

我正在获取从 Gmail API“get”方法起草的原始数据,并使用 Gmail API“send”方法发送它。

'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 页面本身发送此原始数据,则发送成功。因此原始数据是正确的。

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

标签: javascriptgoogle-chrome-extensionxmlhttprequestgmail-api

解决方案


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

Google API Explorer 和Google Javascript 库(通常)为您处理令牌,但如果您直接使用 调用服务端点XMLHttpRequest(),则必须自己管理令牌。

如果您想走这条路,以下是您必须实施的详细信息: https ://developers.google.com/identity/protocols/OAuth2

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


推荐阅读