Skip to content

Instantly share code, notes, and snippets.

@ITSecMedia
Last active April 18, 2026 19:59
Show Gist options
  • Select an option

  • Save ITSecMedia/b45d21224c4ea16bf4a72e2a03f741af to your computer and use it in GitHub Desktop.

Select an option

Save ITSecMedia/b45d21224c4ea16bf4a72e2a03f741af to your computer and use it in GitHub Desktop.
Python: Create an Email with Outlook
# https://itsec.media/post/python-send-outlook-email/
import win32com.client
from win32com.client import Dispatch, constants
const=win32com.client.constants
olMailItem = 0x0
obj = win32com.client.Dispatch("Outlook.Application")
newMail = obj.CreateItem(olMailItem)
newMail.Subject = "I AM SUBJECT!!"
# newMail.Body = "I AM\nTHE BODY MESSAGE!"
newMail.BodyFormat = 2 # olFormatHTML https://msdn.microsoft.com/en-us/library/office/aa219371(v=office.11).aspx
newMail.HTMLBody = "<HTML><BODY>Enter the <span style='color:red'>message</span> text here.</BODY></HTML>"
newMail.To = "email@demo.com"
attachment1 = r"C:\Temp\example.pdf"
newMail.Attachments.Add(Source=attachment1)
newMail.display()
newMail.Send()
@ltpitt

ltpitt commented Nov 1, 2017

Copy link
Copy Markdown

Jewel! 🍡

@e-grn

e-grn commented Mar 27, 2018

Copy link
Copy Markdown

Hello. I have some little error with this code. But "newMail.display(True)" solves it
: )

@iasantosr

Copy link
Copy Markdown

thanks was very helpful

@UnderJollyRoger

Copy link
Copy Markdown

I copied your script verbatim then I get an error. But the email still sends anyway.
line 20, in <module> newMail.send() TypeError: 'bool' object is not callable

@voidsteed

Copy link
Copy Markdown

I copied your script verbatim then I get an error. But the email still sends anyway.
line 20, in <module> newMail.send() TypeError: 'bool' object is not callable

I figured it out. Use newMail.Send() instead of newMail.send()

@mohanramselvaraj

Copy link
Copy Markdown

Thanks.. it works for me,
How to import existing mail signature into the new mail

@ragaveenaitsolutions

Copy link
Copy Markdown

I want to create a email and save it in draft.. How to do it ? Any help would be highly appreciated and Thank you in Advance!

@Stehos

Stehos commented Mar 4, 2020

Copy link
Copy Markdown

Hi Norman, first I want to thank you for publishing this snippet. Please do you know, if there is any change to select a sender account from outlook? I have 5 inboxes in my outlook and the email is sent from the 3rd account.

Thanks.

@ITSecMedia

Copy link
Copy Markdown
Author

@Stehos, I would expect that you define the default sender account in your Email client, try to look there for a solution.

@ayjagadish

Copy link
Copy Markdown

Hello,
Please help/guide me to achieve below goal. Any help is truly appreciated and I remember for my life time 😊.

What I want to do?

  1. I have outlook template file (.oft).
  2. I have Some values in excel.
  3. Insert values of excel into outlook template using python.

Thanks in advance

@debbyca

debbyca commented Sep 29, 2020

Copy link
Copy Markdown

I want to create a email and save it in draft.. How to do it ? Any help would be highly appreciated and Thank you in Advance!

You can use newMail.Save().

@mmelitba

mmelitba commented Aug 4, 2021

Copy link
Copy Markdown

Hi,
Thanks for this post! It´s really usefull.
Do you know the propertie or the command to change the "from" mailbox?

Thanks in advance!

@ITSecMedia

ITSecMedia commented Aug 4, 2021

Copy link
Copy Markdown
Author

Hi,
Thanks for this post! It´s really usefull.
Do you know the propertie or the command to change the "from" mailbox?

Thanks in advance!

@mmelitba

Try it with the Sender properties, check the link below

newMail.Sender = "...."
newMail.SenderEmailAddress= "...."
newMail.SenderName = "...."

https://docs.microsoft.com/en-us/office/vba/api/outlook.mailitem

@ELRame

ELRame commented Apr 1, 2022

Copy link
Copy Markdown

Hi, thanks for the post!
Do you know if it's any chance to bring the mail signature of my mail?

Thank you again!

@Sasaa22222

Sasaa22222 commented Aug 5, 2022

Copy link
Copy Markdown

@ITSecMedia

Hello, i want to ask how i can set a random sender and how i can set random Timestamp?
With the Faker module like this:

newMail.Sender= fake_data.email()
newMail.Timestamp=fake_data.iso8601()

It doesnt work yet. Has someone an idea?

@lhmjst

lhmjst commented Dec 11, 2023

Copy link
Copy Markdown

@ITSecMedia

Hello, just tried Email.Sender & Email.SenderEmailAddress & Email.SenderName, also tried Email.SendUsingAccount , but none of them works.
Any idea? Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment