Гугл скрипт, чтобы удалять сообщения без файлов и оставлять остальные
Я написал скрипт, который удаляет сообщения почты.
Как отредактировать этот скрипт, чтобы он оставлял сообщения с вложениями?
const SPAMMEREMAIL = '[email protected]';
async function trigger() {
if (SPAMMEREMAIL.length < 3)
throw new Error('Danger of deleting all content!');
const threads = Gmail.Users.Threads.list('me', {
q: `(from:${SPAMMEREMAIL})`,
});
if (threads && threads.threads) {
threads.threads.forEach(thread => Gmail.Users.Threads.remove('me', thread.id));
}
const trashThreads = Gmail.Users.Threads.list('me', {
q: `(from:${SPAMMEREMAIL}) is:trash`,
});
if (trashThreads && trashThreads.threads) {
trashThreads.threads.forEach(thread => Gmail.Users.Threads.remove('me', thread.id));
}
}
Ответы (1 шт):
Автор решения: oshliaer
→ Ссылка
Самое легкое, можно получить сообщения без вложений, не треды, а после удалить их. Треды нужны для другого.
/**
* Привязывается к триггеру по времени
*/
function triggerActionsDeleteMessagesWithoutAttacmentByQuery() {
const QUERY = 'from:[email protected]';
if (QUERY.length < 3)
throw new Error('Danger of deleting all content!');
const res = deleteMessagesWithoutAttacmentByQuery_(QUERY);
res.forEach(s => console.log(s));
}
/**
* Удаляет сообщения без вложений
*
* @param {string} query
* @returns {string[]}
*/
function deleteMessagesWithoutAttacmentByQuery_(query) {
const messages = Gmail.Users.Messages.list('me', {
q: `${query} -has:attachment`
});
if (!messages?.messages?.length) return [];
const ids = messages.messages.map(message => message.id);
Gmail.Users.Messages.batchDelete({
ids
}, 'me');
return ids;
}
Немного добавлю:
- Разбил на две функции, как принято в языке - точка входа и параметризированный функционал
- Программа позволяет удалять сообщения из тредов. Например, пришло сообщение без вложения и в этот же тред, тут же, попало сообщение с вложением. Первое будет удалено.