Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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}");
            }
        }