如何使用用户标签(不是完整的线程)标记电子邮件



我创建了这个脚本:

function myFunctionNew() {
var threads = GmailApp.search('in:inbox subject:"xxxxxxxxxxxxxx" ');
GmailApp.markThreadsUnread(threads);

for (var i = 0; i < threads.length; i++) {
var mid = threads[i].getId();
GmailApp.getMessageById(mid).markRead();
GmailApp.getMessageById(mid).star();

// ---> so I mark the complete Thread: GmailApp.getUserLabelByName("1").addToThread(threads[i]);
// Here I want to sign only the one eMail with a User label (e.g. Customer)
//
// ---> GmailApp.moveThreadToArchive(threads[i]);
// Here I want to move  only the one eMail to the archive

GmailApp.getMessageById(id).forward("xxxxxxxxxx@yyyyyy.com");
}
}

但是我如何添加标签并仅移动我拥有的 ID 的一个电子邮件?

谢谢

您的请求可以通过 Gmail API 完成

  • Gmail API为您提供了比GmailApp更多的选项,其中包括标记单个邮件而不是整个线程的选项
  • Gmail API 可以在应用脚本中用作高级 Gmail 服务
  • 您需要做的就是通过在应用程序脚本编辑器中继续Resources > Advanced Google services....来启用该服务
  • 单个消息添加用户标签所需的特定方法与资源{"addLabelIds": [labelId]}Gmail.Users.Messages.modify(resource, userId, id)
  • 对于仅涉及一条消息而不是整个线程的请求,使用与thread id不同的message id,这一点很重要。
  • 如果您不知道您的消息 ID,则需要指定如何查找它(例如,指定感兴趣的狙击作为搜索条件(。
  • 同样重要的是要知道您需要指定labelId而不是labelName,这对于与标准标签相对的用户标签是不同的。
  • 如果您不知道标签 ID,则需要按名称遍历所有标签,直到找到正确的标签

下面是一个示例代码,展示了如何使用 GmailApp 和 Gmail API 的组合添加标签并对单个邮件执行其他操作

function myFunctionNew() {  
var labels = Gmail.Users.Labels.list("me").labels;
for (var a = 0; a < labels.length; a++) {
if(labels[a].name == "Customer"){
var labelId = labels[a].id;
break;
}
}  
var threads = GmailApp.search('in:Inbox subject:"xxxxxxxxxxxxxx" ');
for (var i = 0; i < threads.length; i++) {
var mid = threads[i].getId();
//retrieve the thread with Gmail API to obtain the ids of the thread messages correctly
var thread = Gmail.Users.Threads.get("me", mid);
// retrieve all messages and their id for each thread
var messages = thread.messages;
for (var j = 0; j < messages.length; j++) {
var message = messages[j];
//retrieve the message id
var messageId = message.id;
//perform the desired actions with the message id
GmailApp.getMessageById(messageId).markRead();
GmailApp.getMessageById(messageId).star();
//now, you need to chose which messages you want to label, for example selectt by snippet:
var snippet = message.snippet;
if (snippet == "Paste here the snippet"){
var myId = messageId;
//only the messages with the specified snippet will be labelled and forwarded instead of the whole thread:
Gmail.Users.Messages.modify({"addLabelIds": [labelId]}, "me", myId);
GmailApp.getMessageById(myId).forward("xxxxxxxxxx@yyyyyy.com");
}
}
}     
} 

最新更新