Skip to content

Instantly share code, notes, and snippets.

@ITSecMedia
Last active May 28, 2024 16:59
Show Gist options
  • Save ITSecMedia/b45d21224c4ea16bf4a72e2a03f741af to your computer and use it in GitHub Desktop.
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
Copy link

ltpitt commented Nov 1, 2017

Jewel! 🍡

@e-grn
Copy link

e-grn commented Mar 27, 2018

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

@iasantosr
Copy link

thanks was very helpful

@UnderJollyRoger
Copy link

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

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

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

@ragaveenaitsolutions
Copy link

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
Copy link

Stehos commented Mar 4, 2020

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
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

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
Copy link

debbyca commented Sep 29, 2020

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
Copy link

mmelitba commented Aug 4, 2021

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
Copy link
Author

ITSecMedia commented Aug 4, 2021

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
Copy link

ELRame commented Apr 1, 2022

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
Copy link

Sasaa22222 commented Aug 5, 2022

@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
Copy link

lhmjst commented Dec 11, 2023

@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