В журналах выполнения Apps Script указано Failed, по-видимому, хотя сценарий, похоже, работает. Я проверил его по электронной почте, и в конечном итоге оно было удалено из корзины. Сначала я подумал, что он говорит Failed, когда не находит писем для удаления, но продолжает говорить Failed даже после того, как кажется, что он работает.
Мой скрипт Google Apps, очевидно, работал при тестировании, затем сначала при тестовом развертывании, но затем начал давать сбой со следующей ошибкой.
Error
GoogleJsonResponseException: API call to gmail.users.messages.delete failed with error: Requested entity was not found.
deleteForever @
(anonymous) @
Этот сценарий предназначался для моего личного использования, чтобы навсегда удалить определенные помеченные электронные письма из корзины.
function deleteForever(userId, labelName) {
var threads = GmailApp.search("in:trash label:" + labelName);
for (var i = 0; i < threads.length; i++) {
Gmail.Users.Messages.remove(userId, threads[i].getId());
}
}
deleteForever("me", "permadel")
К вашему сведению, я очень мало знаю об этом языке сценариев и его настройке, поэтому, пожалуйста, держите меня за руку, если они знают ответ.
Было странно, что это, видимо, сработало, когда я нажал «запустить» в редакторе. Затем, я думаю, я выбрал «Тестовое развертывание», чтобы добавить его как «надстройку для разработчика», или он просто добавлялся автоматически и запускался каждую минуту, и он работал во время тестирования в моем Gmail.
И только когда я вернулся позже в тот же день, чтобы увидеть, что при каждом выполнении он терпит неудачу.





После некоторых разговоров между мной и ОП выяснилось, что ошибка возникла, когда сценарий запускался с использованием учетной записи Google без службы Gmail.
Ссылка на пользователя в почтовом ящике клавиатуры делается автоматически. Скрипт Google Apps знает пользователя на клавиатуре в папке «Входящие» Gmail, поскольку пользователь использует скрипт Google Apps с учетной записью Google. Сценарий, использующий Gmail или службу Advanced Gmail, может быть успешным, только если в учетной записи пользователя есть адрес электронной почты Gmail или Google Workspace. Это не удастся, если в учетной записи Google в качестве основного адреса электронной почты указан адрес электронной почты из другой службы. Это крайний случай, но именно это происходило с OP:
Вместо вызова функции для передачи значений параметров, как это было сделано здесь:
function deleteForever(userId, labelName) {
var threads = GmailApp.search("in:trash label:" + labelName);
for (var i = 0; i < threads.length; i++) {
Gmail.Users.Messages.remove(userId, threads[i].getId());
}
}
deleteForever("me", "permadel")
Удалите deleteForever("me", "permadel") и добавьте значения по умолчанию для параметров функции в объявлении функции, как показано ниже:
function deleteForever(userId = "me", labelName = "permadel") {
var threads = GmailApp.search("in:trash label:" + labelName);
for (var i = 0; i < threads.length; i++) {
Gmail.Users.Messages.remove(userId, threads[i].getId());
}
}
Альтернативой является объявление тестовой функции, которая вызывает основную функцию со значениями параметров. Чтобы избежать случайного использования основной функции, сделайте ее частной функцией, добавив подчеркивание в качестве суффикса.
function deleteForever_(userId, labelName) {
var threads = GmailApp.search("in:trash label:" + labelName);
for (var i = 0; i < threads.length; i++) {
Gmail.Users.Messages.remove(userId, threads[i].getId());
}
}
function runner(){
deleteForever("me", "permadel")
}
Чтобы вы знали, код использует расширенную службу Gmail. Его необходимо установить для работы.
Ресурсы
Google Apps Script — это платформа быстрой разработки, которая использует JavaScript в качестве языка программирования и включает в себя, среди прочего, сервисы, упрощающие автоматизацию приложений Google.
Проблема в том, что вы включили вызов функции на верхнем уровне, то есть в глобальной области видимости. Когда вы выбираете функцию в раскрывающемся списке «Редактор сценариев Google Apps» и нажимаете «Выполнить», у механизма JavaScript сценария Google Apps возникают проблемы с этим во время выполнения.
@deanresin У меня код работает нормально. В вашем проекте Google Apps Script может быть что-то, о чем вы нам не сообщили. Вы установили расширенную службу Gmail?
Я установил его. Я не понимаю, как связать мой сценарий с моим Gmail. Это просто произошло. Нужно ли мне выбирать тестовое развертывание? Или это просто работает автоматически? Как я уже упоминал в своем посте, мой скрипт у меня работал полдня, потом начал выдавать "Failed", но вроде бы продолжал работать. Я только что проверил его еще раз, и он перманентно удаляет электронные письма, но выдает ошибку.
@deanresin Ссылка на пользователя в почтовом ящике электронной почты создается автоматически. Скрипт Google Apps знает ваш почтовый ящик Gmail, поскольку для запуска сценария вы используете учетную запись Google в Gmail. Это может быть успешным, только если у учетной записи пользователя есть адрес электронной почты Gmail или Google Workspace. Это не удастся, если в учетной записи Google в качестве основного адреса электронной почты используется адрес электронной почты из другой службы, но это крайний случай.
Я предлагаю вам подождать 24 часа, а затем создать новый проект, чтобы убедиться, что не осталось заглушек, вызывающих проблемы. Это делается для того, чтобы отказаться от того, что вы превысили квоту или активировали защиту сервисов Google.
Я запускаю скрипт каждую минуту. Возможно, я превышаю квоту или что-то в этом роде, но письма с этим ярлыком все равно удаляются из корзины. Но я попробую ваше предложение, спасибо.
Вы были правы, что речь идет о двух аккаунтах. В какой-то момент я добавил заархивированные электронные письма в корзину из дополнительной учетной записи (я больше не использую Gmail), чтобы протестировать ее, и они лежали на второй странице моей корзины и не удалялись. Я их удалил и ошибки прекратились. Если вы добавите это в качестве ответа, я приму это.
Я просто приму это, поскольку ответ находится в комментариях.
@deanresin Ну, ответ должен быть в теле ответа :) Я обновлял его :)
Я попробовал значения по умолчанию, но, к сожалению, все равно получаю то же сообщение об ошибке (за исключением «анонимной» строки).