static void Main(string[] args) { #region Authentication UserCredential credential; //client_secret.json is from https://console.developers.google.com/apis/dashboard //it is recomended that you replace this file with your own application credentials using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) { string credPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); credPath = Path.Combine(credPath, ".credentials/gmail-dotnet-quickstart.json"); credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, Scopes, "User", CancellationToken.None, new FileDataStore(credPath, true)).Result; } #endregion //Starting Service var service = new GmailService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, }); //Infinite Loop for (;;) { //Create a request for a list of (messages / emails) UsersResource.MessagesResource.ListRequest request = service.Users.Messages.List("me"); //Setting up the request request.MaxResults = 1000; //Executing and getting the response var messages = request.Execute().Messages; //Check if response isn't a null //if it is it means the mailbox is empty if (messages == null) { break; } //Creating a BatchDeleteRequest BatchDeleteMessagesRequest requests = new BatchDeleteMessagesRequest(); //Initializing a list of message Ids to be submited requests.Ids = new List <string>(); //Add all the message Ids to the deletion request foreach (Message message in messages) { requests.Ids.Add(message.Id); } //Send google the request to delete all the mails service.Users.Messages.BatchDelete(requests, "me").Execute(); //Show user the number of mails that have been deleted Console.WriteLine($"A batch of {messages.Count} messages has been deleted."); } //Finish with a message for the user Console.WriteLine("You're entire gmail inbox has been deleted."); Console.ReadLine(); }
static void Main(string[] args) { string searchFor = string.Empty; string beforeDate = string.Empty; int batchSize = 100; bool promptMsg = false; if (args.Length == 0) { Console.WriteLine("Usage: [size] [from] [before] [prompt] e.g.: 100 facebook 2014/12/31 true"); return; } try { // call example: 100 facebook 2011/12/31 if (args.Length > 0 && args[0] != null) { Int32.TryParse(args[0], out int newbatchSize); batchSize = newbatchSize > 0 ? newbatchSize : batchSize; } if (args.Length > 1 && (args[1] != null && !string.IsNullOrEmpty(args[1]))) { searchFor = args[1]; } if (args.Length > 2 && args[2] != null && !string.IsNullOrEmpty(args[2]) && DateTime.TryParse(args[2], out DateTime selectedDate)) { beforeDate = args[2]; } if (args.Length > 3 && args[3] != null) { Boolean.TryParse(args[3], out promptMsg); } UserCredential credential; using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) { string credPath = System.Environment.GetFolderPath( System.Environment.SpecialFolder.Personal); credPath = Path.Combine(credPath, ".credentials/GMTool.json"); credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, Scopes, "user", CancellationToken.None, new FileDataStore(credPath, true)).Result; Console.WriteLine("Credential file saved to: " + credPath); } string query = string.Empty;//$"is:unread"; if (!string.IsNullOrEmpty(searchFor)) { query += $" from:{searchFor}"; } if (!string.IsNullOrEmpty(beforeDate)) { query += $" before:{beforeDate}"; } Console.WriteLine($"The query is: {query}"); Console.WriteLine("Proceed? (Y/N)"); var readedKey = Console.ReadKey(); if (readedKey.KeyChar.ToString().ToLower() == "n") { return; } // Create Gmail API service. var service = new GmailService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, }); IList <Message> messages; bool doWork = true; int iterator = 0; int batchnum = 0; while (doWork) { batchnum++; UsersResource.MessagesResource.ListRequest request = service.Users.Messages.List("me"); request.Q = query; // "from:facebook before:2011/12/31"; #if DEBUG request.Q = "from:facebook before:2013/12/31"; #endif request.MaxResults = batchSize; messages = request.Execute().Messages; if (messages != null && messages.Count > 0 && iterator <= batchSize) { Console.WriteLine($"Found: {messages.Count} messages in batch num #{batchnum}."); if (promptMsg) { foreach (var msg in messages) { iterator++; var getRequest = service.Users.Messages.Get("me", msg.Id); var sentMsg = getRequest.Execute(); Console.WriteLine($"{iterator}/{messages.Count} - Msg: {sentMsg.Snippet}"); //UsersResource.MessagesResource.TrashRequest trashRequest = service.Users.Messages.Trash("me", msg.Id); //var result = trashRequest.Execute(); } } else { iterator += messages.Count; } Console.WriteLine($"DELETE ALL {messages.Count} MESSAGES IN CURRENT BATCH? (Y/N) -- !!! WARNING! YOU CANNOT UNDO THIS! !!!"); readedKey = Console.ReadKey(); if (readedKey.KeyChar.ToString().ToLower() == "n") { return; } var batchDeleteReq = new BatchDeleteMessagesRequest { Ids = messages.Select(e => e.Id).ToList() }; var req = service.Users.Messages.BatchDelete(batchDeleteReq, "me"); var batchDeleteResult = req.Execute(); Console.WriteLine($"Deleted {messages.Count} messages in batch num# {batchnum}"); } else { doWork = false; } } Console.WriteLine($"TOTAL Deleted {iterator} messages."); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine($"Exception occured: {ex.Message}"); } }