首页 > 解决方案 > 如何通过 Google Apps 脚本连续删除线程消息?

问题描述

我尝试编写函数来删除 Gmail 线程中包含多条消息的消息。

function movetotrash()
{
 var thread = GmailApp.getInboxThreads(0,1)[0]; // Get first thread in inbox
  if (thread==null)
  {}  
  else
  {
   
    var message = thread.getMessages()[0]; // Get the latest message   
  
   Logger.log('zero'+thread.getMessages()[0].getPlainBody());
    message.moveToTrash()
  }
}

我可以看到该消息在 gmail 界面中消失了。但是当我再次调用这个函数时,我可以看到消息 [0] 是一样的

标签: google-apps-scriptgmail

解决方案


修改点:

  • 在您的脚本中,移动到垃圾箱的电子邮件仍然可以使用var message = thread.getMessages()[0]. 这样,在您运行脚本后,您可以使用var message = thread.getMessages()[0]. 我认为这可能是您的问题的原因。
  • 如果要使用moveToTrash(),检查邮件是否在垃圾箱中如何?在这种情况下,您可以使用isInTrash().

当以上几点反映在您的脚本中时,它变成如下。

修改后的脚本:

从:

var message = thread.getMessages()[0]; // Get the latest message

ogger.log('zero'+thread.getMessages()[0].getPlainBody());
message.moveToTrash()

至:

var messages = thread.getMessages();
for (var i = 0; i < messages.length; i++) {
  if (messages[i].isInTrash()) continue;
  Logger.log(messages[i].getPlainBody());
  messages[i].moveToTrash();
  break;
}
  • 通过此修改,消息在每次运行时都会被移至垃圾箱。

示例脚本:

从您的标题中How to delete thread messages in row via Google Apps Script?,如果您想删除该线程的所有消息,您还可以使用以下脚本。

在使用此脚本之前,请在 Advanced Google services 中启用 Gmail API

var thread = GmailApp.getInboxThreads(0, 1)[0]; // Get first thread in inbox
if (thread) {
  Gmail.Users.Threads.remove("me", thread.getId());
}
  • 此脚本删除线程。因此,当您对此进行测试时,请使用示例线程测试脚本。请注意这一点。

参考:


推荐阅读