使用Google Script永久删除我的电子邮件的脚本

时间:2016-04-02 18:45:27

标签: javascript java gmail gmail-api

此Gmail.Users.Messages.remove(userId,id)如何工作?电子邮件的ID是什么,是永久删除电子邮件的正确功能吗?

在我的情况下,我想立即删除我发送的所有电子邮件。这是我从某人那里拿来的一些代码,只有不同的标签:

function myFunction() {
  var threads = GmailApp.search("in:sent label:Inbox");
  var me = Session.getActiveUser().getEmail();
    for (var i = 0; i < threads.length; i++) {
      Gmail.Users.Messages.remove(me, threads[i]);
    }

}

这是否正确无误,有人可以帮助我吗?

编辑:我修改了我的代码,但它仍然无法正常工作,我仍然无法弄清楚如何使用函数remove,这就是它:

function myFunction() {

  var me = Session.getActiveUser().getEmail();
  var thread = Gmail.Users.Threads.list(me);
  for (var i = 0; i < 1000; i++) {
        Gmail.Users.Threads.remove(me, thread);
        thread = Gmail.Users.Threads.list(me).nextPageToken;

  }

}

一旦代码工作,我将触发每分钟运行该功能。这样我的Sent文件夹总是空的。

有什么建议吗?

4 个答案:

答案 0 :(得分:0)

在我这边我正在使用这个

 thread.moveToTrash();

(同意垃圾可能不是你所期望的......)

Doc google(en):https://developers.google.com/apps-script/reference/gmail/gmail-thread#movetotrash

发帖(fr):http://curiositedevie.blogspot.be/2015/08/gmail-gestion-de-vos-emails-aux-petits.html?m=1

完整示例脚本(en):https://github.com/boly38/script.google.com/blob/master/organizeEmail.gs

编辑:这是一个永久删除线程的解决方案

使用Gmail.Users.Threads.remove(mymail, thread.id);,如下面的示例所示。

如何使用样本:

  • 更新您的Gmail地址(首次执行时,您将被要求提供相关授权)。
  • 我强烈建议您先使用permanentlyRemoveMyLabel = false进行游戏。在这种情况下,此示例将使用label:mytest
  • 显示(并保留)消息
  • 完成后,将permanentlyRemoveMyLabel设置为true。在这种情况下,此示例将显示并永久删除邮件label:mytest

https://script.google.com/的示例:

function removeMyTest() {
  var mymail = "myemailhere@gmail.com";
  var mylabel = "mytest";
  var permanentlyRemoveMyLabel = false;
  var pageToken;
  do {
    var threadList = Gmail.Users.Threads.list('me', {
      q: 'label:' + mylabel,
      pageToken: pageToken
    });
    if (threadList.threads && threadList.threads.length > 0) {
      threadList.threads.forEach(function(thread) {
        Logger.log('id: %s snippet: %s', thread.id, thread.snippet);
        if (permanentlyRemoveMyLabel) {
          Gmail.Users.Threads.remove(mymail, thread.id);
          Logger.log('id: %s snippet: %s REMOVED', thread.id, thread.snippet);
        }
      });
    }
    pageToken = threadList.nextPageToken;
  } while (pageToken);
}

答案 1 :(得分:0)

我已经在文档中做了一些挖掘。根据您想要的结果,我认为您正在寻找的是User.messages.delete。如文档中所述:

  

立即永久删除指定的邮件。此操作无法撤消。

根据Gmail.Users.Messages.remove(),我对此并不确定,但我认为这是一个旧的实现,因为我浏览了社区并发现此answer将其作为片段提供永久删除电子邮件/消息。我坚持当前的文档所说的内容。

希望这会有所帮助。祝好运。 :)

答案 2 :(得分:0)

这将删除已发送文件夹中的所有会话。注意:如果有人向您发送了一条消息并且您回复了该消息,那么该消息也会被删除,我认为传入消息也会被删除。这可能不是你想要的。

function DeleteByLabel() {

  var label="sent"
  var threads = GmailApp.search("in:" +label);
  var me = Session.getActiveUser().getEmail();
  Logger.log("Found " + threads.length + " threads with label " + label);

  for (var i = threads.length -1; i >=0; i--) {
     var thisid=threads[i].getId();
     Logger.log("Removing thread " +i + ' of ' + threads.length + " from " + label + " with ID = " + thisid);

    try {
        Gmail.Users.Threads.remove(me, thisid);
    }
    catch(err) {
     Logger.log("Error " + err.message + " when removing thread with ID " +thisid);
    };
}

}

在我的“草稿”文件夹中尝试了它,它摆脱了那些确定。

注意:您必须在运行时启用相应的Gmail API。

答案 3 :(得分:0)

将其添加到谷歌脚本中。

function Intialize() {
  return;
}

function Install() {
  ScriptApp.newTrigger("purgeGmail")
           .timeBased().everyMinutes(1).create();
}

function Uninstall() {
  var triggers = ScriptApp.getScriptTriggers();
  for (var i=0; i<triggers.length; i++) {
    ScriptApp.deleteTrigger(triggers[i]);
  }
}
function purgeGmail() {
  var search = "category:forums";
  var threads = GmailApp.search(search, 0, 500);
  GmailApp.moveThreadsToTrash(threads);
}