Automating Emails with Python: A Comprehensive Guide

Tejashree Salvi
3 min readFeb 14, 2023

--

Photo by Team Nocoloco on Unsplash

Email is a critical means of communication in today’s world, but it can be time-consuming and tedious to send out emails manually. Fortunately, Python provides a simple and efficient way to automate email sending and receiving tasks. In this article, we will explore how to use Python to automate emails, starting with the basics and moving on to more advanced techniques.

Getting started with Python’s built-in smtplib library

The simplest way to automate email sending in Python is by using the built-in smtplib library. The smtplib library is a powerful tool that allows you to send emails using the Simple Mail Transfer Protocol (SMTP). To use the smtplib library, you must first set up an email account that can be used to send emails programmatically.

Sending email with Python

Once you have set up your email account, you can use Python to send emails. To send an email, you will need to import the smtplib library, create an instance of the SMTP class, log in to your email account, and send the email.

Here’s an example code snippet that sends a simple email using Python:

import smtplib

smtp_server = 'smtp.gmail.com'
smtp_port = 587
smtp_username = 'youremail@gmail.com'
smtp_password = 'yourpassword'

from_email = 'youremail@gmail.com'
to_email = 'recipient@example.com'
subject = 'Hello, world!'
body = 'This is a test email.'

message = f'Subject: {subject}\n\n{body}'

with smtplib.SMTP(smtp_server, smtp_port) as smtp:
smtp.starttls()
smtp.login(smtp_username, smtp_password)
smtp.sendmail(from_email, to_email, message)
  • This code sends an email from youremail@gmail.com to recipient@example.com with the subject "Hello, world!" and the body "This is a test email."
  • The starttls() method enables Transport Layer Security (TLS) encryption, which ensures that the email is transmitted securely.
  • The login() method logs in to your email account using your username and password.
  • Finally, the sendmail() method sends the email to the recipient.

Handling email attachments

Sending email attachments is a common requirement for many automated email tasks. To send an email attachment using Python, you can use the email and MIME modules.

Here’s an example code snippet that sends an email with an attachment:

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

smtp_server = 'smtp.gmail.com'
smtp_port = 587
smtp_username = 'youremail@gmail.com'
smtp_password = 'yourpassword'

from_email = 'youremail@gmail.com'
to_email = 'recipient@example.com'
subject = 'Email with attachment'
body = 'Please find attached the report.'

msg = MIMEMultipart()
msg['From'] = from_email
msg['To'] = to_email
msg['Subject'] = subject
msg.attach(MIMEText(body))

with open('report.pdf', 'rb') as f:
attachment = MIMEApplication(f.read(), _subtype='pdf')
attachment.add_header('Content-Disposition', 'attachment', filename='report.pdf')
msg.attach(attachment)

with smtplib.SMTP(smtp_server, smtp_port) as smtp:
smtp.starttls()
smtp.login(smtp_username, smtp_password)
smtp.send_message(msg)

This code sends an email with the subject “Email with attachment” and the body “Please find attached the report.” The email also contains a PDF file attachment named “report.pdf”.

  • The MIMEMultipart() class allows you to create a multipart email message that contains both text and attachments.
  • The MIMEText() class creates a plain text message body, while the MIMEApplication() class creates an attachment with the PDF file.

Automating email receiving with the imaplib library

Python’s built-in imaplib library can be used to automate email-receiving tasks. The imaplib library provides a set of functions for interacting with an IMAP email server, allowing you to retrieve and process email messages programmatically.

Here’s an example code snippet that uses the imaplib library to retrieve the subject and sender of the latest email in your inbox:

import imaplib
import email

imap_server = 'imap.gmail.com'
imap_username = 'youremail@gmail.com'
imap_password = 'yourpassword'

with imaplib.IMAP4_SSL(imap_server) as imap:
imap.login(imap_username, imap_password)
imap.select('inbox')
_, data = imap.search(None, 'ALL')
latest_email_id = data[0].split()[-1]
_, message_data = imap.fetch(latest_email_id, '(BODY.PEEK[HEADER])')
message = email.message_from_bytes(message_data[0][1])
subject = message['Subject']
sender = message['From']
print(f'Subject: {subject}')
print(f'Sender: {sender}')

This code logs in to your email account using the imaplib library, selects the inbox folder and retrieves the latest email message.

  • The search() method searches for all email messages in the inbox.
  • The fetch() method retrieves the message header of the latest email.
  • The message_from_bytes() method converts the message header data into a Message object, which can be used to extract the subject and sender of the email.

In this article, we have explored the basics of using Python to automate email sending and receiving tasks.

Hope you find this article useful

Follow for more interesting technical blogs.

--

--