是否可以搜索带有“Apps script queue”标签的邮件,并仅为这些特定邮件(而非整个帖子)添加新标签?
当我使用GmailApp.search('label:Apps脚本队列')时,我收到了请求的消息,但是当我为这些消息分配新标签时,该线程的所有其他消息(在邮箱中的其他位置)将获得相同的标签。这不是我想要的。
答案 0 :(得分:1)
在向线程中的特定消息添加标签时,此代码不会返回错误,如果使用线程列表方法,您将看到它仅放置在特定的messageID中(单独处理)。但是,一旦您的用户界面(Gmail网站)处于对话模式,它就可以在两个标签中查看。
function searchMail(){
var threads = GmailApp.search("SOME SEARCH");
Logger.log(threads.length);
listLabel('me');
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
Logger.log(messages.length);
for (var j = 0; j < messages.length; j++){
if (messages[j].isInInbox()){
Logger.log('me' + 'id msg: ' + messages[j].getId());
//Add label to the first reply
addLabel('me',messages[1].getId());
}
else{
Logger.log('me' + 'id msg: ' + messages[j].getId() +" not in inbox");
}
}
}
}
function addLabel(userId, messageId){
var resource = {addLabelIds: ["Label_6"]}
Gmail.Users.Messages.modify(resource, userId, messageId);
}
答案 1 :(得分:0)
在Gmail中,标签会应用于某个帖子,并且不能应用于某个帖子的单个电子邮件。
然而,您可以将星星/颜色应用于单个邮件。
答案 2 :(得分:0)
这是一个老话题,但是对于像我这样阅读的任何人,也许这可以为您节省一些时间:
function getLabelMap() {
var allLabels = Gmail.Users.Labels.list('me');
var labelMap = [];
for (var label of allLabels.labels) {
labelMap[label.name] = label.id;
}
return labelMap;
}
var labelMap = getLabelMap();
function getLabel(labelName) {
return labelMap[labelName];
}
function labelMessage(messageID, labelName) {
var labelID = getLabel(labelName);
var labelRequest = {addLabelIds: [labelID]};
var subject = GmailApp.getMessageById(messageID).getSubject();
if (labelID != null) {
Logger.log("Labelling as %s: %s", labelName, subject);
Gmail.Users.Messages.modify(labelRequest, 'me', messageID);
} else {
Logger.log("Label not found: %s", labelName);
}
}
function unlabelMessage(messageID, labelName) {
var labelID = getLabel(labelName);
var labelRequest = {removeLabelIds: [labelID]};
var subject = GmailApp.getMessageById(messageID).getSubject();
if (labelID != null) {
Logger.log("Removing label %s: %s", labelName, subject);
Gmail.Users.Messages.modify(labelRequest, 'me', messageID);
} else {
Logger.log("Label not found: %s", labelName);
}
}
function reLabel () {
var messagesToRelabel = Gmail.Users.Messages.list('me', {'q':'label:Apps-script-queue'}).messages || [];
// Loop through each message (not by thread), using the Advanced Gmail Service (full GMail API in a Google Script).
messagesToRelabel.forEach(function (messageToRelabel){
unlabelMessage(messageToRelabel.id, "Apps script queue");
labelMessage(messageToRelabel.id, "New label");
});
}
OP并没有要求,但可能对其他尝试使用GMail API进行“高级过滤/标记”的人有所帮助:
function getMessageHeader(messageID, headerField) {
var messageInfo = Gmail.Users.Messages.get('me', messageID, {'format':'METADATA', 'metadataHeaders':[headerField]});
if (messageInfo.payload.headers) {
return messageInfo.payload.headers[0].value;
} else {
return null;
}
}
以上内容可让您过滤标题信息,例如我用它来检查X-Uniform-Type-Identifier
是否等于com.apple.mail-note
,以自动将旧的Apple Notes标记为删除。