Let’s use Python to Send an Email with SMTP over SSL. We will send a plain text email. You will need a GMAIL Account to complete this tutorial. Don’t have one? Go HERE to set one up. Let’s get started! ✨✨
Getting the GMAIL App Password
First we need to set up an App Password in our Gmail Account. First go to the upper right hand corner of the GMAIL Inbox where your Google account picture/avatar is located, click the image and then click Manage your Google Account. (Click HERE to skip to the Python Code Section if you have already setup an app password.)
Next, click Security on the left menu of the next page.
Find the Signing in to Google section and click App Passwords subsection.
NOTE: If you don’t have 2-Step Verification turned ON, you will be prompted to set it up before you can access the App Password section
On the App Passwords page, you will set your app password. Click the Select App dropdown and select Other (Custom Name) item.
You will then be asked to give the App Password a name. When you give it a suitable name, then you click GENERATE:
When you click GENERATE a new window will open with your App Password copy this 16-character value and keep it safe. (the real value is not shown below).
Now that we have our App Password we can finally write our Python Script to send a simple email message.
Python Code to Send Email
This our code:
import smtplib, ssl
sender_email = "[email protected]"
receiver_email = "[email protected]"
message = """\
Subject: It Worked!
Simple Text email from your Python Script."""
port = 465
app_password = input("Enter Password: ")
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", port, context=context) as server:
server.login("[email protected]", app_password)
server.sendmail(sender_email, receiver_email, message)
Let’s explain what is happening here:
- Import smtplib and ssl libraries. The smtplib library defines an SMTP client session object that can be used to send email. The ssl library uses the OpenSSL library and provides access to Transport Layer Security (TLS) encryption and peer authentication facilities.
- We define the sender_email and receiver_email. The values used in the above code are for demonstration only, you will need to replace these values with valid email addresses.
- We define a simple email message as message.
- We define port as 465. Port number 465 is the default port for SMTP over SSL or SMTPS.
- We define app_password which will prompt the user at the terminal/console to input the 16-character app password we generated earlier.
- The create_default_context() method returns a new SSLContext object with default settings for the given purpose. We will use this to create the SMTP session.
- We create our secure SMTP session. The SMTP_SSL() method encapsulates an SMTP connection as server. Since we are using the Google SMTP server we must supply smtp.gmail.com for the host parameter. Then we supply the port and then the context that we specified earlier.
- The login method logs into an SMTP server that requires authentication. We supply the GMAIL email address account that was used to generate the app password along with the app_password itself.
- The sendmail() method is what will send our mail message. It accepts the sender_email, receiver_email and message parameters.
When we execute this script we will be prompted for the app_password at the console/command line/shell:
When we type it in (without spaces) the script should execute without error. If you supply the wrong app_password you will get the following message:
smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials g12sm7812946qtq.92 - gsmtp')
If all goes well, you should see the email message in the inbox of the email address specified in the receiver_email.
NOTE: In testing this script, a GMAIL address was used for both sender_email and receiver_email, also DO NOT SAVE YOUR APP PASSWORD WITH YOUR SCRIPT. Keep it safe and secure.
Thanks for reading. Good luck! Check out another great Python Tutorial on AES Encryption. 👌👌👌