This Python tutorial discusses how to use Gmail API in Python to send mail. Gmail is one of the most popular email services.
Owned by Google, many people use Gmail to send official and personal emails. It is used by everyone, ranging from professionals and businesses to students and children. As Gmail provides 2-step verification (2SV) to its users, hackers cannot easily hack the user account, and the details and mails remain safe.
Although the 2-step verification of Gmail is a must option to activate, if 2SV is on for your Gmail account, you will find difficulties sending emails from the Python SMTP module. This is obvious because Gmail does not allow you to use any third-party software or package to log in to your account if 2SV is active. Although with the Python SMTP module, you can send emails using your Gmail account, you have to downgrade your Gmail security by deactivating the 2SV feature.
So, is there any other option for sending emails with Gmail in Python without deactivating the 2-factor authentication? The answer is yes! It's all thanks to Gmail App Passwords API that allows you to send an email with Python without deactivating the 2SV feature and without even specifying the original password in the Python script.
What is Gmail App Passwords?
The Gmail App Passwords is an API that generates a 16-digit passcode for your non-google application and allows you to use that password to access your Google account. Moreover, you can only use Gmail App Passwords if you have enabled 2SV in your account.
Here, in this Python tutorial, we will detail how to use Gmail API in Python to send a mail. We will also learn how to send attachments via Gmail using Python.
How to Use Gmail API in Python to Send a Mail?
Step 1: Create a Gmail Account
This goes without saying. If you want to send an email using Gmail, then you first require a Gmail account. You can create a Gmail account by signing up here . For this tutorial, we have created a new Gmail account by the name codehundred100@gmail.com . Here is what its inbox looks like:
Step 2: Create a Gmail App Password
Check this link to know how to create and use app passwords. Although the following screenshot details the steps of doing the aforementioned, it's recommended to open the link once to check for any updates in the process:
a: Go to your Google Account
b: Click on Security
In the Security section, looks for App passwords and click on it to create a new app passcode.
Note: Also, make sure that 2-Step Verification is on.
c: Select Other Custom Name
In the App passwords section, select Other (Custom Name) in the Select app option.
d: Generate App
Now generate an App by the name My App . The name My App is arbitrary; thus, you can choose any name of your liking.
e: Copy the Generated App Password Note:
Do not share the generated passcode with anyone!
Once the password is created, copy it to your clipboard because we will be using it in our Python script to access the Gmail account.
Note: Do not click on the Done button without copying the 16-character password, or else you will lose the password, and you have to delete the app and create a new one.
f: All done with App password
Once your app password is generated, you will see a similar screen to the one shown above. So now that we are done with the app password let's code in Python to send an email using the Gmail account.
Note: You will also be receiving a confirmation email from Google after creating the App password.
Step 3: Write Python Program to Send Email through Gmail
#Example 1: python program to send Gmail emails with Python
import smtplib
from email.message import EmailMessage
msg= EmailMessage()
my_address ="codehundred100@gmail.com" #sender address
app_generated_password = "habebwgknjtopoxd" # gmail generated password
msg["Subject"] ="The Email Subject" #email subject
msg["From"]= my_address #sender address
msg["To"] = "vinaykhatri@gmail.com" #reciver address
msg.set_content("This is the body of the email") #message body
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
smtp.login(my_address,app_generated_password) #login gmail account
print("sending mail")
smtp.send_message(msg) #send message
print("mail has sent")
Program Execution
Output
sending mail
mail has sent
To send the email, we are using the Python Standard
smtplib
and
email
modules. Both modules come prepacked with Python, and thus, you do not need to install them separately.
In the above example, you can see that we have specified the
my_address
and
app_generated_password
variables in the open string format that is not a good Python practice.
You definitely do not want other developers to read your password and email, so we prefer to use environmental variables. But for making this tutorial easy to understand, we have used them with a simple string.
Check Gmail Sent Label
After executing the above program, if you check your Gmail Sent Label , you will see that the email you sent using Python is available here.
As you can see that your message has been saved to the Sent label, which means the message has been sent successfully. Since the receiver account is also our other account, we can check if the receiver account received the mail or not.
On checking, we can see that we have received the mail from codehundred100@gmail.com. Hence, our task is complete.
Send Multimedia Files With Gmail Using Python
So far, we have learned how to use Gmail API in Python to send a mail. For that, we used the
codehudndred100@gmail.com
Gmail account. But if we wish to send an image as mail to someone, we have to attach the image file with the mail. Can we do that?
Yes, we can! To attach an image file to the mail body, we can use the
email
module and the
add_attachment
method, but we also have to import the image file and read it as a binary object. For that, we will be using the Python standard
imghdr
module.
#Example 2: python program to send a mail with an image attached
import imghdr
import smtplib
from email.message import EmailMessage
msg= EmailMessage()
my_address ="codehundred100@gmail.com" #sender address
app_generated_password = "habebwgknjtopoxd" #generated passcode
msg["Subject"] ="The Email Subject"
msg["From"]= my_address #sender address
msg["To"] = "vinaykhatri@gmail.com" #reciver addresss
msg.set_content("This is the body of the email")
with open('photo.jpg', "rb") as file: #open image file
file_data = file.read()
file_type = imghdr.what(file.name)
file_name = file.name
print("File has been attached to the message body")
msg.add_attachment(file_data, maintype="image",
subtype=file_type, filename= file_name) #attach image file to msg
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
smtp.login(my_address,app_generated_password) #login to gmail
print("sending mail\\.....")
smtp.send_message(msg) #send mail
print("mail has sent!")
Execute the Program Output
File has been attached to the message body
sending mail\.....
mail has sent!
Check the Gmail Sent Label
As you can see, the image file has been attached to the mail and sent to the receiver's address.
Conclusion
In this Python tutorial, we learned how to use Gmail API in Python to send mail. For this purpose, we used Google App Passwords API to generate a 16-character password and send emails using Gmail with Python.
In our first Python example, we discussed how to send simple text mail, and in the second example, we detailed how to attach an image file to the mail and send it to the receiver. Therefore, now you know how you can send emails in Gmail using Python without deactivating 2SV.
If you like this article or have any suggestions, please let us know by commenting down below.
People are also reading:
- Install python package using jupyter notebook?
- How to automate login using selenium in python?
- Python map() function with Examples
- How to delete emails in Python?
- Python readline method with examples
- Python Coding on MacBook
- How to extract all stored Chrome passwords with python?
- Python Counter in Collection
- Reading and writing CSV files in python using CSV module pandas
- Python copy file and directory using shutil
Leave a Comment on this Post