首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建草稿时出现“丢失草稿消息”401错误

创建草稿时出现“丢失草稿消息”401错误
EN

Stack Overflow用户
提问于 2022-03-01 19:55:09
回答 1查看 142关注 0票数 1

在尝试POST at https://gmail.googleapis.com/gmail/v1/users/${user_id}/drafts时,为了创建gmail草稿,我得到了一个Missing draft message错误提示。

这是发出请求的实际代码:

代码语言:javascript
运行
复制
let userMail = axios.post(`https://gmail.googleapis.com/gmail/v1/users/${user_id}/drafts`,
  {
    body: {
      draft: {
        message: {
          raw: "Hard Coded mail",
        }
      }
    }
  },
  {
    headers: {
      Authorization: `Bearer ${access_token}`,
    }
  })
  console.log(userMail)

console.log(userMail)节目是一堆信息,如:

代码语言:javascript
运行
复制
data: {
      error: {
        code: 400,
        message: 'Missing draft message',
        errors: [
          {
            message: 'Missing draft message',
            domain: 'global',
            reason: 'invalidArgument'
          }
        ],
        status: 'INVALID_ARGUMENT'
      }
}

我是在请求的body中遗漏了什么,还是语法不正确?

根据这个线程缺少消息草稿- javascript Gmail API -如何构造请求的主体?

“请求的正确结构:”

代码语言:javascript
运行
复制
'draft': {
  'message': {
    'raw': base64EncodedEmail
  }
}

PS: --我不使用外部节点模块,保留它为“香草”

编辑(1):试图添加FromToSubject字段:

代码语言:javascript
运行
复制
var message = 'MIME-Version: 1.0\r\n' +
  'Content-type: multipart/alternative; boundary=boundaryboundary\r\n\r\n' +
  'From: ' + from + "\r\n" +
  'To: ' + to + "\r\n" +
  'Subject: ' + subject + "\r\n" +
  '--boundaryboundary\r\n' +
  'Content-type: text/plain; charset=UTF-8\r\n' +
  mailContent + "\r\n\r\n" +
  '--boundaryboundary--';
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-02 01:53:03

修改要点:

  • 在您的情况下,请求体是JSON.stringify({"message": {"raw": data}})
  • 请在请求头中包含"Content-Type": "application/json"
  • 当您想要放置一个文本的Hard Coded mail,请创建请求正文如下。 MIME-版本: 1.0内容-类型:多部分/可选;boundary=boundaryboundary -边界内容-类型:文本/纯文本;charset=UTF-8硬编码邮件-边界-边界
  • 并且,请将上述请求体编码到websafe 64数据。

当这些要点反映在您的脚本中时,如下所示。

修改脚本:

代码语言:javascript
运行
复制
var user_id = "me";
var text = "Hard Coded mail";

var message = 'MIME-Version: 1.0\r\n' +
  'Content-type: multipart/alternative; boundary=boundaryboundary\r\n\r\n' +
  '--boundaryboundary\r\n' +
  'Content-type: text/plain; charset=UTF-8\r\n' +
  text + "\r\n\r\n" +
  '--boundaryboundary--';
var blob = new Blob([message], {type:"text/plain"});
var f = new FileReader();
f.readAsDataURL(blob);
f.onload = d => {
  var base64 = d.target.result.replace(/_/g, '/').replace(/-/g, '+').split(",")[1];
  axios.post(`https://gmail.googleapis.com/gmail/v1/users/${user_id}/drafts`,
    JSON.stringify({"message": {"raw": base64}}),
    {headers: {Authorization: `Bearer ${access_token}`, "Content-Type": "application/json"}}
  ).then((res) => {
    console.log(res.data)
  }).catch((error) => {
    console.error(error.response.data.error)
  })
}

结果:

运行此脚本时,将在日志中显示以下结果。

代码语言:javascript
运行
复制
{
   "id":"###",
   "message":{
      "id":"###",
      "threadId":"###",
      "labelIds":[
         "DRAFT"
      ]
   }
}

参考资料:

添加:

作为另一种方法,下面的修改脚本如何?在此修改中,不使用blob。并使用message/rfc822的内容类型。在这种情况下,端点被更改为https://gmail.googleapis.com/upload/gmail/v1/users/${user_id}/drafts。请小心这件事。

修改脚本:

代码语言:javascript
运行
复制
var user_id = "me";
var text = "Hard Coded mail";

var message = 'MIME-Version: 1.0\r\n' +
  'Content-type: multipart/alternative; boundary=boundaryboundary\r\n\r\n' +
  '--boundaryboundary\r\n' +
  'Content-type: text/plain; charset=UTF-8\r\n' +
  text + "\r\n\r\n" +
  '--boundaryboundary--';
axios.post(`https://gmail.googleapis.com/upload/gmail/v1/users/${user_id}/drafts`,
  message,
  {headers: {Authorization: `Bearer ${access_token}`, "Content-Type": "message/rfc822"}}
).then((res) => {
  console.log(JSON.stringify(res.data))
}).catch((error) => {
  console.error(error.response.data.error)
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71313965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档