Gmail automatycznie po 30 dniach usuwa wszystkie e-maile przeniesione przez użytkownika do kosza. Czy istnieje sposób, aby zmienić to domyślne zachowanie na 7 dni?
Odpowiedź
Nie, nie ma możliwości zmiany domyślnego sposobu działania kosza w Gmailu. Obejmuje to skrócenie lub wydłużenie czasu trwania .
Możesz stworzyć swój własny kosz na śmieci, który robi coś podobnego, ale jest to trochę uciążliwe i nie robi tego, co chcesz. Musisz dodać własną etykietę inne niż klikanie przycisku usuwania za każdym razem (za pomocą przycisku „Etykiety”, a następnie niestandardowej etykiety kosza).
Następnie „musiałbyś utworzyć filtr (jednorazowo; w sekcji„ Ustawienia ”->„ Filtry i zablokowane adresy ”->„ Utwórz nowy filtr ”), który„ zawiera słowa ”label:custom-trash older_than:7d
z działaniem Delete it
(„Utwórz filtr z tym wyszukiwaniem” -> „OK” -> „Usuń”).
Ale to powoduje tylko wysłanie go do kosza Gmaila.
Aby zautomatyzować usuwanie kosza w tym momencie, wymagałoby użycia skryptu użytkownika do otwarcia folderu kosza (używając document.querySelector("[href="https://mail.google.com/mail/u/0/#trash"]").click()
), kliknięcie przycisku „Opróżnij kosz teraz” (za pomocą document.querySelector(".ya span").click()
), a następnie kliknięcie przycisku „OK” (za pomocą document.querySelector(".Kj-JD-Jl button").click()
). Ale nawet „musiałbyś go uruchamiać z otwartą stroną”, co czyni filtr bezużytecznym …
TL; DR : Nie, to niemożliwe.
Odpowiedź
Tak, jest to możliwe, ale wymaga utworzenia niestandardowego skryptu Aplikacji Google. Oto jak to zrobić w skrócie:
- Jeśli jesteś zalogowany do Gmaila, możesz przejść do https://script.google.com/ i utwórz nowy projekt skryptowy.
- Otwórz ten projekt i utwórz nowy plik skryptu. Umieść w nim swój skrypt (patrz przykład poniżej)
- Będziesz musiał przejść do menu Zasoby, a następnie wybrać podmenu „Zaawansowane usługi Google”, a następnie włączyć opcję „Gmail API”.
- Okienko Zaawansowane usługi Google informuje, że „Te usługi muszą być również włączone w panelu interfejsu API Google Cloud Platform”. Będziesz więc musiał podążać za tym linkiem i włączyć również ten interfejs API.
- Na koniec będziesz musiał utworzyć co najmniej jeden wyzwalacz, który będzie wywoływał twój skrypt w dowolnych odstępach czasu (co godzinę, codziennie itd.) lub na podstawie innego wybranego wydarzenia.
Oto skrypt Aplikacji Google służący do usuwania niechcianych wiadomości e-mail z różnych etykiet (folderów), które utworzyłem na podstawie innych źródeł online. Ten kod jest udostępniany bez jakiejkolwiek gwarancji – używasz go na własne ryzyko. Niewłaściwe użycie funkcji Gmail.Users.Threads.remove () może spowodować trwałą utratę ważnych wiadomości e-mail .
/* Delete all emails from the given email address in the given label. */ function deleteEmailsFrom(fromEmailAddress, inLabel) { var queryEmailsToDelete = "from:" + fromEmailAddress + " in:" + inLabel; var permanentlyDeleteThreads = true; var pageToken; do { var threadList = Gmail.Users.Threads.list("me", { q: queryEmailsToDelete, pageToken: pageToken }); if (threadList.threads && threadList.threads.length > 0) { threadList.threads.forEach(function(thread) { Logger.log("About to delete this email thread: id: %s, snippet: %s", thread.id, thread.snippet); if (permanentlyDeleteThreads) { Gmail.Users.Threads.remove("me", thread.id); Logger.log("Deleted this email thread: id: %s, snippet: %s", thread.id, thread.snippet); } }); } pageToken = threadList.nextPageToken; } while (pageToken); } /* Delete all emails from the given email address in both Spam and Trash folders. */ function deleteSpamOrTrashEmailsFromAddress(fromEmailAddress) { deleteEmailsFrom(fromEmailAddress, "trash"); deleteEmailsFrom(fromEmailAddress, "spam"); } function deleteUnwantedSpamOrTrashEmails() { deleteSpamOrTrashEmailsFromAddress("[email protected]"); deleteSpamOrTrashEmailsFromAddress("[email protected]"); deleteSpamOrTrashEmailsFromAddress("[email protected]"); }
Odpowiedź
Oto skrypt Aplikacji Google, który utworzyłem i używam codziennie. Możesz dostosować swój kosz Gmaila, aby zachowywał e-maile tak długo, jak chcesz.
//INSTRUCTIONS // 1. Create two lables in Gmail: SYSTEM/reset & SYSTEM/moved // 2. Set how long you want to retain mail in trash on lines 31-34 (5m = 5 months) // 3. Setup a trigger to run this script at least as many times a day as emails you expect to accumulate in your trash over the time you selected (1 trigger a day = preserve up to 1000 emails in trash; 2 triggers a day = preserve up to 2000 emails in trash) //HOW IT WORKS // Deleted Emails are moved out of your trash and immediately back in, thus restarting the 30 day deletion time // Labels are used to keep track of which emails have been moved //WHY DAILY TRIGGERS ARE NEEEDED // Google limits script to edit up to 100 emails at a time function extendTrashTime() { function move(moved_label, empty_threads) { GmailApp.moveThreadsToArchive(empty_threads); GmailApp.moveThreadsToTrash(empty_threads); moved_label.addToThreads(empty_threads); } function reset(reset_label, moved_label, moved_threads) { reset_label.addToThreads(moved_threads); moved_label.removeFromThreads(moved_threads); } function empty(reset_label, reset_threads) { reset_label.removeFromThreads(reset_threads); } let moved_label = GmailApp.getUserLabelByName("SYSTEM/moved"); let reset_label = GmailApp.getUserLabelByName("SYSTEM/reset"); // CHANGE TIME TO RETAIN MAIL IN THE THREE LINES BELOW let moved_threads = GmailApp.search("in:trash newer_than:5m -label:SYSTEM/ignore label:SYSTEM/moved", 0, 100); let reset_threads = GmailApp.search("in:trash newer_than:5m -label:SYSTEM/ignore label:SYSTEM/reset", 0, 100); let empty_threads = GmailApp.search("in:trash newer_than:5m -label:SYSTEM/ignore -label:SYSTEM/moved -label:SYSTEM/reset", 0, 100); let moved_total = moved_threads.length; let reset_total = reset_threads.length; let empty_total = empty_threads.length; Logger.log("moved_total", moved_total); Logger.log("reset_total", reset_total); Logger.log("empty_total", empty_total); if (moved_total >= 0 && reset_total === 0 && empty_total > 0) { Logger.log("Phase 1: move emails & label with moved"); move(moved_label, empty_threads); } else if (moved_total > 0 && reset_total >= 0) { Logger.log("Phase 2: remove moved label and replace with reset label"); reset(reset_label, moved_label, moved_threads); } else if (moved_total === 0 && reset_total > 0) { Logger.log("Phase 3: remove reset label"); empty(reset_label, reset_threads); } else { Logger.log("No results for empty_threads query"); } }