DEV Community

Cover image for How to Send Emails in Python Using Gmail’s Free SMTP Mail Server API
Ali
Ali

Posted on

3

How to Send Emails in Python Using Gmail’s Free SMTP Mail Server API

This is the easiest way you can start sending emails with Python using only two libraries, smtplib and email.

We will be using Gmail’s free RESTful API in this example.

Here's the code

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

message = MIMEMultipart()
message["To"] = 'To line here.'
message["From"] = 'From line here.'
message["Subject"] = 'Subject line here.'

title = '<b> Title line here. </b>'
messageText = MIMEText('''Message body goes here.''','html')
message.attach(messageText)

email = 'Your Gmail address here.'
password = 'Your app password here.'

server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo('Gmail')
server.starttls()
server.login(email,password)
fromaddr = 'From line here.'
toaddrs  = 'Address you send to.'
server.sendmail(fromaddr,toaddrs,message.as_string())

server.quit()
Enter fullscreen mode Exit fullscreen mode

How the code works ?

First, let’s import smtplib then MIMEMultipart and MIMEText from email.mime.multipart and email.mime.text respectively:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
Enter fullscreen mode Exit fullscreen mode

We then call MIMEMultiPart() and instantiate it to the variable Message. We then give a string value to each variable which are Message, To, From and Subject, it should look like this:

Message = MIMEMultipart()
Message["To"] = 'To line here.'
Message["From"] = 'From line here.'
Message["Subject"] = 'Subject line here.'
Enter fullscreen mode Exit fullscreen mode

We'll also give a title to our email through the title variable and add a message through MIMEText() and instantiate it to the variable messageText and finally attach our email message to our main variable Message using the attach() function, it should look like this:

title = '<b> Title line here. </b>'
messageText = MIMEText('''Message body goes here.''','html')
Message.attach(messageText)
Enter fullscreen mode Exit fullscreen mode

Let’s add our Gmail address and our App password, click the link here if you don’t know how to get one:

email = 'Your Gmail address here.'
password = 'Your App password here.'
Enter fullscreen mode Exit fullscreen mode

Then we'll have to connect to Gmail's SMTP server, we'll do that using the smtplib library and we'll need two variables which are the server we want to connect to and the port which are smtp.gmail.com and 587 respectively.

Using the smtplib library we'll be calling the SMTP function and add the server and port variables as its arguments, it should look like this:

smtplib.SMTP('smtp.gmail.com:587') (don't forget the : between them)

We'll then instantiate it to the variable server:

server = smtplib.SMTP('smtp.gmail.com:587')
Enter fullscreen mode Exit fullscreen mode

We then add an ehlo statement using server.ehlo(‘Gmail’), this should be your domain name, this is useful when sending en email to another mail server that supports ESMTP, let’s keep it simple and just put Gmail:

server.ehlo('Gmail')
Enter fullscreen mode Exit fullscreen mode

Let’s also start the TLS protocol with server.starttls(), this tells the mail server we want to send our email through a secure connection:

server.starttls()
Enter fullscreen mode Exit fullscreen mode

We'll then login to the mail sever using this line:

server.login(email,password)
Enter fullscreen mode Exit fullscreen mode

Let’s add a from address and to address(es), using fromaddr and toaddrs respectively:

fromaddr = 'Your Gmail address.'
toaddrs  = 'Destination address.'
Enter fullscreen mode Exit fullscreen mode

Finally, we send our email using server.sendmail(fromaddr,toaddrs,message.as_string()) and we close our connection to the mail server using server.quit():

server.sendmail(fromaddr,toaddrs,message.as_string())
server.quit()
Enter fullscreen mode Exit fullscreen mode

Save that in a file called send_email.py, open a Terminal if you're on Linux or a Command Prompt if you're on Windows and launch it using python send_email.py and you should see this:

Linux Terminal launching a Python script

If nothing happens, well good news it's working!

You should have received an email to your destination email(s), here's what I got:

Email received to a Gmail account after launching the Python script

Sending email using Python and Gmail's free SMTP server is the easiest way you can start sending email within your Python code, this is exactly what I've done when I built my first online busines ever. You can read more about it here.

API Trace View

How I Cut 22.3 Seconds Off an API Call with Sentry 🕒

Struggling with slow API calls? Dan Mindru walks through how he used Sentry's new Trace View feature to shave off 22.3 seconds from an API call.

Get a practical walkthrough of how to identify bottlenecks, split tasks into multiple parallel tasks, identify slow AI model calls, and more.

Read more →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay