我有一个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中,但是更容易看到卷曲中发生了什么。)
答案 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} }。