Node.js 发送 POST 请求到 Gmail API 发送邮件

4
我正在尝试使用服务器端的node.js向Gmail发送消息API发送请求,但没有成功。我遇到了以下错误:
body: '{
 "error": {
  "errors": [
   {
    "domain": "global", 
    "reason": "invalidArgument",
    "message": "\'raw\' RFC822 payload
     message string or uploading message via /upload/ URL required"  
   }
  ],
  "code": 400,
  "message": "\'raw\' RFC822 payload message
   string or uploading message via /upload/ URL required"
 }
}'
}

输入参数oauth2token和raw是有效的,事实上,如果我使用Google OAuth 2 playground(https://developers.google.com/oauthplayground)并将令牌和原始值作为值,电子邮件确实会发送。有人能看出我错过了什么吗?
    function sendMail(oauth2token, raw) {
    context.log('Token: ' + oauth2token);
    context.log('raw: ' + raw);

    var params = {
        userId: user_id,
        resource: { 'raw': raw}
    };

    var headers = {
        "HTTP-Version": "HTTP/1.1",
        "Content-Type": "application/json",
        "Authorization": "Bearer " + oauth2token
    };
    
    var options = {
        headers: headers,
        url: "https://www.googleapis.com/gmail/v1/users/me/messages/send",
        method: "POST",
        params: params
    };

    request(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            context.log(body);
        }
        if (error) {
            context.log(error);
        }
        else {
            context.log(response);
        }
    })
}

我有同样的问题。你解决了吗? - grabbag
2个回答

0

如果你在 Google playground 中测试一切看起来都很好,我会开始检查你正在使用的其他外部依赖项。例如,request。也许你需要传递一个解析后的 URL 对象而不是 URL。请检查这个链接:https://github.com/request/request#requestoptions-callback

这是你解析后的 URL 对象的样子:

Url {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'www.googleapis.com',
  port: null,
  hostname: 'www.googleapis.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/gmail/v1/users/me/messages/send',
  path: '/gmail/v1/users/me/messages/send',
  href: 'https://www.googleapis.com/gmail/v1/users/me/messages/send' }

要么这样做,要么将现有选项更改为uri而不是url


0

您只需要在 body 中传递 raw 消息:

function sendMail (oauth2token, raw) {
  var options = {
    method: 'POST',
    url: 'https://www.googleapis.com/gmail/v1/users/me/messages/send',
    headers: {
      'HTTP-Version': 'HTTP/1.1',
      'Content-Type': 'application/json',
      'Authorization': 'Bearer ' + oauth2token
    },
    body: JSON.stringify({
      raw: raw
    })
  };

  request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      context.log(body);
    }
    if (error) {
      context.log(error);
    } else {
      context.log(response);
    }
  });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接