Inserting a PNG image into the body of an Outlook email using Python

What will you learn?

In this tutorial, you will learn how to seamlessly embed a PNG image into the body of an Outlook email using Python. This skill is valuable for creating visually appealing and engaging email content when sending messages programmatically through Outlook.

Introduction to the Problem and Solution

Sending emails with images is a common need, but embedding images directly into the email body can be more challenging than attaching them as files. In this tutorial, we will address this challenge by exploring how to insert PNG images into the body of Outlook emails using Python. By following these steps, you can enhance your automated emailing processes and create visually-rich email content effortlessly.


import win32com.client as win32

# Initialize outlook application
outlook = win32.Dispatch('Outlook.Application')

# Create a new mail item
mail = outlook.CreateItem(0)

# Add subject and recipient
mail.Subject = "Subject Here"
mail.To = ""

# Embedding PNG in HTML body - change 'path_to_image.png' with actual file path 
mail.HTMLBody = f"<h3>Email Content</h3><p>Sending an inline image:</p><img src='cid:myimage'><br>{mail.HTMLBody}"
attachment = mail.Attachments.Add('path_to_image.png')
attachment.PropertyAccessor.SetProperty("", "myimage")

# Send the mail

# Copyright PHD

Note: Replace ‘path_to_image.png’ with your actual image file path.


To achieve embedding a PNG image into an Outlook email using Python, we utilize the win32com library to interact with Outlook via COM objects. Here’s a breakdown: – Create a new mail item. – Set the subject and recipient of the email. – Embed the PNG image within the HTML body by referencing it as a Content-ID (‘cid’). – Attach the image file and associate it with its respective Content-ID for seamless integration.

    How do I retrieve my Outlook emails programmatically?

    You can use libraries like pywin32 or exchangelib in Python to access and manage Outlook emails through their APIs.

    Can I send emails with attachments using Python?

    Yes, you can send emails with attachments by adding attachment files while creating or composing your email message object programmatically.

    What should I do if my embedded image is not displaying correctly in some email clients?

    Ensure that your <img> tag’s source attribute references ‘cid:’ followed by your specified Content-ID exactly matching what was set during attachment association.

    How can I handle errors while sending emails through Outlook using Python?

    You can implement error handling mechanisms such as try-except blocks to manage exceptions that may occur during the emailing process.

    Is it possible to customize the appearance of embedded images in Outlook emails?

    Yes, you can style embedded images using CSS properties within your HTML content to control aspects like size, alignment, borders, etc.


    In conclusion, mastering the art of embedding images directly into Outlook emails using Python provides immense flexibility for conveying visually-rich content efficiently. By following this guide, you are equipped to elevate your automated emailing capabilities and create compelling email experiences for recipients.

    Leave a Comment