使用 Google 脚本永久删除我的电子邮件的脚本
Script to permenantly delete my emails with Google Script
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]);
}
}
这是否正确,有人可以帮助我吗?
编辑:我修改了我的代码,但它仍然无法正常工作,我仍然无法弄清楚如何使用函数删除,就是这样:
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;
}
}
代码运行后,我将每分钟触发一次 运行 函数。这样我的发件夹就一直是空的。
我这边用的是这个
thread.moveToTrash();
(同意垃圾可能不是您所期望的..)
文档 google(英文):https://developers.google.com/apps-script/reference/gmail/gmail-thread#movetotrash
Post (fr) : http://curiositedevie.blogspot.be/2015/08/gmail-gestion-de-vos-emails-aux-petits.html?m=1
完整示例脚本(英文):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);
}
我在文档中做了一些挖掘。有了你想要的结果,我想你要找的就是User.messages.delete。如文档中所述:
Immediately and permanently deletes the specified message. This operation cannot be undone.
根据 Gmail.Users.Messages.remove()
,我不确定这一点,但我认为它是一个旧的实现,因为我环顾社区并发现这个 answer 提供它作为片段用于永久删除 email/message。不过,我会坚持当前文档所说的内容。
这一直有效到 2017 年 2 月中旬。
我用它来清空我的垃圾
`var threads = GmailApp.getTrashThreads(0, 100);
for (var i = threads.length -1; i >=0; i--) {
Logger.log("Removing thread " +i + ' of ' + threads.length + " from Trash");
try {
Gmail.Users.Messages.remove(me, threads[i].getId());
} catch(err) {
Logger.log("Error " + err.message);
};
}
Logger.log("Finished removing " + threads.length + " threads from Trash.");`
它现在已停止工作并出现以下错误:
`17-02-25 02:10:53:510 PST] Removing thread 1 of 2 from Trash
[17-02-25 02:10:53:620 PST] Error Not Found
[17-02-25 02:10:53:621 PST] Removing thread 0 of 2 from Trash
[17-02-25 02:10:53:763 PST] Error Not Found
[17-02-25 02:10:53:764 PST] Finished removing 2 threads from Trash.`
最近功能好像有变化。
这将从已发送文件夹中删除所有对话。注意,如果有人给你发了一条消息而你回复了那将是同一对话的一部分,我认为收到的消息也会被删除。这可能不是你想要的。
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);
};
}
}
在我的 "Drafts" 文件夹中试过,它摆脱了那些,好的。
注意 运行 时,您必须启用相应的 Gmail API。
将其添加到 google 脚本中。
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);
}
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]);
}
}
这是否正确,有人可以帮助我吗?
编辑:我修改了我的代码,但它仍然无法正常工作,我仍然无法弄清楚如何使用函数删除,就是这样:
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;
}
}
代码运行后,我将每分钟触发一次 运行 函数。这样我的发件夹就一直是空的。
我这边用的是这个
thread.moveToTrash();
(同意垃圾可能不是您所期望的..)
文档 google(英文):https://developers.google.com/apps-script/reference/gmail/gmail-thread#movetotrash
Post (fr) : http://curiositedevie.blogspot.be/2015/08/gmail-gestion-de-vos-emails-aux-petits.html?m=1
完整示例脚本(英文):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);
}
我在文档中做了一些挖掘。有了你想要的结果,我想你要找的就是User.messages.delete。如文档中所述:
Immediately and permanently deletes the specified message. This operation cannot be undone.
根据 Gmail.Users.Messages.remove()
,我不确定这一点,但我认为它是一个旧的实现,因为我环顾社区并发现这个 answer 提供它作为片段用于永久删除 email/message。不过,我会坚持当前文档所说的内容。
这一直有效到 2017 年 2 月中旬。
我用它来清空我的垃圾
`var threads = GmailApp.getTrashThreads(0, 100);
for (var i = threads.length -1; i >=0; i--) {
Logger.log("Removing thread " +i + ' of ' + threads.length + " from Trash");
try {
Gmail.Users.Messages.remove(me, threads[i].getId());
} catch(err) {
Logger.log("Error " + err.message);
};
}
Logger.log("Finished removing " + threads.length + " threads from Trash.");`
它现在已停止工作并出现以下错误:
`17-02-25 02:10:53:510 PST] Removing thread 1 of 2 from Trash
[17-02-25 02:10:53:620 PST] Error Not Found
[17-02-25 02:10:53:621 PST] Removing thread 0 of 2 from Trash
[17-02-25 02:10:53:763 PST] Error Not Found
[17-02-25 02:10:53:764 PST] Finished removing 2 threads from Trash.`
最近功能好像有变化。
这将从已发送文件夹中删除所有对话。注意,如果有人给你发了一条消息而你回复了那将是同一对话的一部分,我认为收到的消息也会被删除。这可能不是你想要的。
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);
};
}
}
在我的 "Drafts" 文件夹中试过,它摆脱了那些,好的。
注意 运行 时,您必须启用相应的 Gmail API。
将其添加到 google 脚本中。
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);
}