如何使用 Google 应用程序脚本查询未被丢弃的电子邮件?
How to query for NOT trashed emails with Google App Scripts?
我正在尝试为 Gmail 创建一个脚本以仅接收“未删除”的电子邮件,但我也收到已删除的电子邮件。
为什么?
function fromGmailToDrive() {
var query = "in:inbox -in:trash has:attachment";
var threads = GmailApp.search(query);
threads.forEach((t) => {
const messages = t.getMessages()
messages.forEach((m) => {
console.log("m.isInTrash():", m.isInTrash()) //<- some are true, why?
})
})
}
如果我在 Gmail 浏览器应用程序中使用该查询,则该查询有效。
正如评论中提到的 Marios,您想要 -in:trash
。但由于您添加了 in:inbox
和 has:attachment
,它也添加了符合这些条件的电子邮件。
如果您只想查找包含附件且不在垃圾箱中的邮件,请使用:
代码:
function fromGmailToDrive() {
var query = "-in:trash has:attachment";
var threads = GmailApp.search(query);
threads.forEach((t) => {
const messages = t.getMessages()
messages.forEach((m) => {
console.log("m.isInTrash():", m.isInTrash())
})
})
}
注:
- 您还可以在查询 conditions/criteria 之间添加
OR
或 AND
以明确显示。相应地使用它们。
编辑:
- 如果一切都失败了,您可能只需要有一个条件来检查邮件何时不在垃圾箱中。这不是一个好的答案,应该被视为最后的手段,但它仍然可以解决您的问题。
代码:
if (!m.isInTrash())
// do something when message not in trash
更新的答案:
isInTrash()
方法 threads and messages 均受支持。在您的解决方案中,您检查的是被丢弃的消息,而不是被丢弃的线程。
如果你想检查线程是否被丢弃,你应该在 threads 上应用 isInTrash()
方法:
function fromGmailToDrive() {
var query = "-in:trash has:attachment";
var threads = GmailApp.search(query);
threads.forEach((t) => {
console.log("m.isInTrash():", t.isInTrash());
})
}
可选解决方法
从 threads
:
获取所有 trashed threads and exclude them (! includes)
function fromGmailToDrive() {
var query = "-in:trash has:attachment";
var threads = GmailApp.search(query);
var trashThreadsIDs = GmailApp.getTrashThreads().map(t=>t.getId());
var clean_threads = threads.filter(t=>!trashThreadsIDs.includes(t.getId()));
clean_threads.forEach((t) => {
const messages = t.getMessages()
messages.forEach((m) => {
console.log("m.isInTrash():", m.isInTrash()) //<- some are true, why?
})
})
}
我正在尝试为 Gmail 创建一个脚本以仅接收“未删除”的电子邮件,但我也收到已删除的电子邮件。
为什么?
function fromGmailToDrive() {
var query = "in:inbox -in:trash has:attachment";
var threads = GmailApp.search(query);
threads.forEach((t) => {
const messages = t.getMessages()
messages.forEach((m) => {
console.log("m.isInTrash():", m.isInTrash()) //<- some are true, why?
})
})
}
如果我在 Gmail 浏览器应用程序中使用该查询,则该查询有效。
正如评论中提到的 Marios,您想要 -in:trash
。但由于您添加了 in:inbox
和 has:attachment
,它也添加了符合这些条件的电子邮件。
如果您只想查找包含附件且不在垃圾箱中的邮件,请使用:
代码:
function fromGmailToDrive() {
var query = "-in:trash has:attachment";
var threads = GmailApp.search(query);
threads.forEach((t) => {
const messages = t.getMessages()
messages.forEach((m) => {
console.log("m.isInTrash():", m.isInTrash())
})
})
}
注:
- 您还可以在查询 conditions/criteria 之间添加
OR
或AND
以明确显示。相应地使用它们。
编辑:
- 如果一切都失败了,您可能只需要有一个条件来检查邮件何时不在垃圾箱中。这不是一个好的答案,应该被视为最后的手段,但它仍然可以解决您的问题。
代码:
if (!m.isInTrash())
// do something when message not in trash
更新的答案:
isInTrash()
方法 threads and messages 均受支持。在您的解决方案中,您检查的是被丢弃的消息,而不是被丢弃的线程。
如果你想检查线程是否被丢弃,你应该在 threads 上应用 isInTrash()
方法:
function fromGmailToDrive() {
var query = "-in:trash has:attachment";
var threads = GmailApp.search(query);
threads.forEach((t) => {
console.log("m.isInTrash():", t.isInTrash());
})
}
可选解决方法
从 threads
:
function fromGmailToDrive() {
var query = "-in:trash has:attachment";
var threads = GmailApp.search(query);
var trashThreadsIDs = GmailApp.getTrashThreads().map(t=>t.getId());
var clean_threads = threads.filter(t=>!trashThreadsIDs.includes(t.getId()));
clean_threads.forEach((t) => {
const messages = t.getMessages()
messages.forEach((m) => {
console.log("m.isInTrash():", m.isInTrash()) //<- some are true, why?
})
})
}