无法使用 'metadata-only' URI 发送消息

Can't use 'metadata-only' URI to send messages

我正在尝试复制位于页面底部的 API 资源管理器的功能: https://developers.google.com/gmail/api/v1/reference/users/messages/send 我已经弄清楚如何创建 base64 编码的消息并可以让 API Explorer 发送消息,但我试图在 "Advanced REST Client" Chrome 应用程序中复制结果。

我已将 url 设置为:

https://www.googleapis.com/gmail/v1/users/me/messages/send

我添加了以下内容headers:

Authorization: Bearer (valid Oauth2 token here)

Content-Type: message/rfc822

并将body设置为:

{"raw":"Q29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSINCk1JTUUtVmVyc2lvbjogMS4wDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0DQp0bzogYnJ5Y2VAdGhvcm1lZGlhLmNvbQ0KZnJvbTogYnJ5Y2VAdGhvcm1lZGlhLmNvbQ0Kc3ViamVjdDogVGVzdA0KDQpIZWxsbyE="}

当我发送请求时,我得到回复:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "wrongUrlForUpload",
    "message": "Uploads must be sent to the upload URL. Re-send this request to https://www.googleapis.com/upload/gmail/v1/users/me/messages/send"
   }
  ],
  "code": 400,
  "message": "Uploads must be sent to the upload URL. Re-send this request to https://www.googleapis.com/upload/gmail/v1/users/me/messages/send"
 }
}

我正在尝试弄清楚如何形成允许我使用元数据 URI 的请求。 API 的文档似乎几乎只关注上传 URI,因此理解起来有点粗糙。

我不太熟悉高级 REST 客户端,但有效的 ajax 请求应该是:

$.ajax({
      type: "POST",
      url: "https://www.googleapis.com/gmail/v1/users/me/messages/send",
      contentType: "application/json",
      dataType: "json",
      beforeSend: function(xhr, settings) {
        xhr.setRequestHeader('Authorization','Bearer ' + accessToken);
      },
      data: JSON.stringify({"raw": mail}) // The url-safe base64 encoded mail

换句话说,我认为你使用了错误的contentType;当您发送带有 "raw" 参数的对象时,它应该是 "application/json",而不是 "message/rfc822"。