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()
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
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.'
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)
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.'
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')
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')
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()
We'll then login to the mail sever using this line:
server.login(email,password)
Let’s add a from address and to address(es), using fromaddr
and toaddrs
respectively:
fromaddr = 'Your Gmail address.'
toaddrs = 'Destination address.'
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()
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:
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:
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.
Top comments (0)