Gmail添加SENT或DRAFT标签

时间:2016-01-18 18:27:32

标签: gmail gmail-api

我有一个mbox文件,我使用Gmail"存档"功能。其中的每条消息都有一个" X-Gmail-Labels"标题列出了它进入的标签/文件夹。当我将邮箱从mbox文件导入新的Gmail帐户时(通过在Thunderbird中打开文件并复制邮件),新Gmail帐户中的邮件副本仍然具有X -Gmail-Labels标题,但它没有做任何事情 - 消息实际上没有标记任何标签。因此,我编写了一个脚本,使用Gmail API获取每封邮件,阅读其X-Gmail标签,并将这些标签添加到邮件中。这主要是有效的,除了对于两个标签(SENT和DRAFT),我得到一个错误,说它是一个无效的标签。那些标签ID确实存在。如何将它们添加到消息中?

以下是我提出的要求:

curl -H "Authorization: Bearer OAUTH_TOKEN" \
-H "Content-Type: application/json" \
-X POST \
-d '{"addLabelIds": ["SENT"]}' \
https://www.googleapis.com/gmail/v1/users/me/messages/MESSAGE_ID/modify

以下是回复机构:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidArgument",
    "message": "Invalid label: SENT"
   }
  ],
  "code": 400,
  "message": "Invalid label: SENT"
 }
}

(注意:我的实际脚本是在Python中,但是更容易看到卷曲中发生了什么。)

1 个答案:

答案 0 :(得分:4)

SENT - 和DRAFT - 标签的特殊之处在于,一旦创建了消息,就无法将其添加到消息中。有关每个标签的更多信息,请参阅this guide

相反,你可以insert your messages并立即给他们正确的标签。

以下是一个示例,只是在Developer Console中编写示例消息:

已发送消息

var encodedMessage = btoa([
  'From: example@gmail.com', '\r\n',
  'To: example@gmail.com', '\r\n',
  'Subject: cool subject', '\r\n', 
  '\r\n',
  'this is my sent message'
].join('')) 

请求

POST https://www.googleapis.com/gmail/v1/users/me/messages?access_token={YOUR_API_KEY}
{
 "raw": "RnJvbTogZW10aG9saW5AZ21haWwuY29tDQpUbzogZW10aG9saW5AZ21haWwuY29tDQpTdWJqZWN0OiBjb29sIHN1YmplY3QNCg0KdGhpcyBpcyBteSBzZW50IG1lc3NhZ2U=",
 "labelIds": [
  "SENT"
 ]
}

<强>响应

{
 "id": "1525643b0785e7d7",
 "threadId": "1525643b0785e7d7",
 "labelIds": [
  "SENT"
 ]
}

草稿

请求

POST https://www.googleapis.com/gmail/v1/users/me/messages?access_token={YOUR_API_KEY}
{
 "raw": "RnJvbTogZW10aG9saW5AZ21haWwuY29tDQpUbzogZW10aG9saW5AZ21haWwuY29tDQpTdWJqZWN0OiBjb29sIHN1YmplY3QNCg0KdGhpcyBpcyBteSBzZW50IG1lc3NhZ2U=",
 "labelIds": [
  "DRAFT"
 ]
}

<强>响应

{
 "id": "1525644c9553906d",
 "threadId": "1525644c9553906d",
 "labelIds": [
  "DRAFT"
 ]
}

此外,如果您希望创建的时间与插入的消息中的Date - 标头相同,请确保传递的查询参数internalDateSource的值为{{1} }。