Often we wish to delete all the unwanted emails from our email inbox. Although email providers like Gmail provide a multi-select option to delete emails in the bunch, all those features are all for common users.
As Python developers, we should be writing a dedicated Python script that can delete the emails present in the INBOX, TRASH, DRAFT, and SENT boxes.
In this Python tutorial, we will be going to code in Python and use its inbuilt
imaplib
module to delete emails from our Gmail account.
So would you like to write some Python code that can delete emails for you with a single execution?
Let's get started.
How to Delete Emails in Python?
If you directly try to access the Google account and log in with your credentials with 2 Step Verification active for your Gmail account, you would not be able to log in with Python 3 party libraries.
So in order to log in, you either have to turn down your 2SV or create an App Password using the google Gmail API.
Check out our How to send Gmail Email with Python? the article, where we have provided all the information about how to generate an App password with Gmail. With the help of the Generated App password, you can easily log in to your Gmail account without deactivating your 2StepVerificaiton, or reducing security.
We have already generated the App password by the name " My App, " and we will be using its 16 characters long password as the password for our Gmail login credentials. Now let's have a look at our Gmail Inbox and decide which emails we want to delete.
For this tutorial, we will be deleting all the messages from Kaggle that have been sent from the mail address " noreply@kaggle.com." So now, let's get started with Python code.
Python Code to Delete Emails
Step 1 - Importing the Libraries
First of all, we will import the
imaplib
library.
import imaplib
#user credentials
my_email= "codehundred100@gmail.com"
app_generated_password = "nsjsmslishsnahsy"
In your case, you should be using your own email address and App Generated Password.
Note: For the ease of this Python tutorial, we have put the email address and password in the plain string format. For production development, you should always use Python Environment Variables to store and use sensitive credentials like email ID and password.
Step 2 - Login to Gmail Server
Now let's use the credentials and log in to the Gmail server, but before that, initialize the IMAP4 object for Gmail.
#initialize IMAP object for Gmail
imap = imaplib.IMAP4_SSL("imap.gmail.com")
#login to gmail with credentials
imap.login(my_email, app_generated_password)
As for this tutorial, we are deleting our Gmail messages, and that's why we are setting the IMAP server for Gmail with
"imap.gamil.com"
. The Python
imaplib
library can also map servers for different email providers.
Click here
to know all the supported email servers.
Caution: Instead of Google Gmail App Password, if you are using your original password, you will receive an error indicating credentials are incorrect, and you are forced to allow a less secure app on for your setting. But we do not recommend you deactivate 2 step verification. Instead, you can use the Google App Password API as we are using for this tutorial. Never use your real Gmail password while writing automated scripts.
Step 3 - Select the Mailbox
After setting the server and logging in with the credentials, let's select the mailbox from where we want to delete the emails. For this tutorial, we are deleting the emails from the inbox, so we will select INBOX. To do so, we will use the
imap.select()
method.
imap.select("INBOX")
If you wish to delete email from Trash, Spam, Important, and other labels, you can specify it, such as
imap.select("Trash")
and
imap.select("Spam")
. To know all the mailboxes provided by your email provider, use the
imap.list()
method.
Step 4 - Choose the Mails to Delete
After selecting the INBOX mailbox, select the mails you want to delete. With the help of the
imap.search()
method, we can select the specific emails we want to delete. For this tutorial, we are deleting the mails from
Kaggle
with the email address
noreply@kaggle.com
.
status, messages_id_list = imap.search(None, 'FROM "noreply@kaggle.com"')
If you wish to delete all emails, you can search all mails with the
imap.search(None, "ALL")
statement. Else, you can also search for the emails with specific subjects using
imap.search(None, 'SUBJECT "The Subject name"')
. The
imap.search()
method returns a tuple of
status
string and list of byte string representing mails IDs, separated by space. Now let's grab the
messages_id_list
byte string and convert it into a list of message-ids.
#convert the string ids to list of email ids
messages = message_id_list[0].split(b' ')
Now we have the
messages
,
which is a list of all the searched mail IDs. Let's iterate through all its IDs and mark them as deleted with the method.
print("Deleting mails")
count =1
for mail in messages:
# mark the mail as deleted
imap.store(mail, "+FLAGS", "\\Deleted")
print(count, "mail(s) deleted")
count +=1
print("All selected mails has been deleted")
# delete all the selected messages
imap.expunge()
# close the mailbox
imap.close()
# logout from the server
imap.logout()
This will set all the searched mails with the delete flag, and delete all the selected emails, and log you out from the sever.
Putting All the Code Together and Executing It
#python program to delete emails.
import imaplib
my_email = "codehundred100@gmail.com"
app_generated_password = "nsjsmslishsnahsy"
#initialize IMAP object for Gmail
imap = imaplib.IMAP4_SSL("imap.gmail.com")
#login to gmail with credentials
imap.login(my_email, app_generated_password)
imap.select("INBOX")
status, message_id_list = imap.search(None, 'FROM "noreply@kaggle.com"')
#convert the string ids to list of email ids
messages = message_id_list[0].split(b' ')
print("Deleting mails")
count =1
for mail in messages:
# mark the mail as deleted
imap.store(mail, "+FLAGS", "\\Deleted")
print(count, "mail(s) deleted")
count +=1
print("All selected mails have been deleted")
# delete all the selected messages
imap.expunge()
# close the mailbox
imap.close()
# logout from the account
imap.logout()
Output
Deleting mails
1 mail(s) deleted
2 mail(s) deleted
3 mail(s) deleted
4 mail(s) deleted
5 mail(s) deleted
All selected mails have been deleted
As you can see, a total of 5 emails have been deleted. Now let's check our Gmail Inbox to verify the same.
All five emails from Kaggle have been successfully deleted. Thus, the job is done!
Conclusion
In this Python tutorial, we learned how to use the Python standard
imaplib
library to access a Gmail account and delete specific emails. As for this tutorial, we have used Gmail, but the
imaplib
library allows you to access other email servers too. Thus, you can work it out to know for yourself.
Let us know if you come across any issues while doing so in the comments below.
Email servers like Gmail are highly secure, and that's why they do not allow any third-party package to log in to their server, but using the Gmail App Passwords or by turning on the Allow the less Secure option or Deactivating the 2Step verification, we can log in to a Gmail account with the
imaplib
library. But we do not recommend you deactivate 2Step Verification. Instead, leverage the Gmail App Password provided by Google, which is secure and efficient.
People are also reading:
- How to use Gmail API in python to send mail?
- Install python package using jupyter notebook
- How to extract all stored Chrome passwords with Python?
- How to automate login using selenium in Python?
- Your guide for starting python coding on a MacBook
- Python counter in collections with example
- Python copy file and directory using shutil
- Reading and writing CSV files in python using CSV module pandas
- Python map() function with Examples
- Python readline method with examples
Leave a Comment on this Post