代码之家  ›  专栏  ›  技术社区  ›  Pallavi Goyal

使用Chrome扩展中的Gmail API发送电子邮件时获取401状态

  •  0
  • Pallavi Goyal  · 技术社区  · 8 年前

    我从Gmail API的“get”方法中获取起草的原始数据,并使用gmailapi的“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");
            }
        }
    }`
    

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

    2 回复  |  直到 8 年前
        1
  •  0
  •   payne    8 年前

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

    Google API浏览器和 Google Javascript libraries XMLHttpRequest() ,您必须自己管理令牌。

    如果你想走这条路,以下是你必须实现的细节: https://developers.google.com/identity/protocols/OAuth2

    你可以在“Oauth2游乐场”里试一试: https://developers.google.com/oauthplayground/

        2
  •  0
  •   Pallavi Goyal    8 年前

    谢谢你的回复。

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

    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");
                 }
             }
        }
    }
    


    一。令牌是通过URL和header发送的。只应以页眉形式发送。
    2。param raw是作为字符串发送的,但它应该作为JSON对象发送。

    推荐文章