Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Apps Script - Gmail, delete forever e-mails in trash with specific label

I'm trying to make a script that automatically deletes e-mails from a certain sender immediately and permanently, as Gmail only allows for a filter which sends an e-mail to trash for 30 days. Please do not suggest that the default filter is enough, as for my situation, it is vital that I do not know that I was sent an e-mail from this sender.

My current script looks like this:

function deleteForever(labelName) {
    var threads = GmailApp.search("in:trash label:" + labelName);
    for (var i = 0; i < threads.length; i++) {
      threads[i].moveToTrash(); // Where I would need a delete forever trigger
    }
};

However, I have been unable to figure out a way to use a GmailThread and to delete it permanently as there does not exist a function for this purpose. I was looking to see if there was a way I could finish the task using JavaScript, but have been unable figure out a method.

Does anyone have an idea how I can set these e-mails to delete themselves permanently when received?

like image 368
SpeedBurner Avatar asked Apr 14 '13 02:04

SpeedBurner


3 Answers

@karan's answer already points to the solution which worked for me, but being inexperienced / not-a-professional-developer, it took me a little work to translate it into a working solution to the original question. Here's a concise description of the steps I used to perform this task:

  1. Create the following function in my script:

    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());
      }
    }
    
  2. To enable advanced services for this script, locate Resources on the menu, and select Advanced Google services...

  3. Enable Gmail API on the list.

  4. Before selecting OK, click on the Google Developers Console link. Search for gmail, and enable the service there as well.

  5. Done, select OK; the function should now work. (Comment: as mentioned in the link @karan provided, one can use "me" for userID, or alternatively provide one's Gmail address: "<address>@gmail.com".)

(Steps to enable advanced services for my script are based on Google's guide here.)

like image 71
Jonathan Y. Avatar answered Sep 19 '22 15:09

Jonathan Y.


It is not possible, by design, to delete an email permanently using GmailApp.

like image 22
Corey G Avatar answered Sep 19 '22 15:09

Corey G


This script works for Google Apps Script. You have to just connect and auth services together.

function myFunction() {

  var labelName = "deleteForever"

  var threads = GmailApp.search("in:trash label:" + labelName);
  for (var i = 0; i < threads.length; i++) { 
    Gmail.Users.Messages.remove('me', threads[i].getId());
  }
}
like image 36
Daniel Bultas Avatar answered Sep 18 '22 15:09

Daniel Bultas