Send Outlook Email Via Python? Send Outlook Email Via Python? python python

Send Outlook Email Via Python?


import win32com.client as win32outlook = win32.Dispatch('outlook.application')mail = outlook.CreateItem(0)mail.To = 'To address'mail.Subject = 'Message subject'mail.Body = 'Message body'mail.HTMLBody = '<h2>HTML Message body</h2>' #this field is optional# To attach a file to the email (optional):attachment  = "Path to the attachment"mail.Attachments.Add(attachment)mail.Send()

Will use your local outlook account to send.

Note if you are trying to do something not mentioned above, look at the COM docs properties/methods: https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/mailitem-object-outlook. In the code above, mail is a MailItem Object.


For a solution that uses outlook see TheoretiCAL's answer below.

Otherwise, use the smtplib that comes with python. Note that this will require your email account allows smtp, which is not necessarily enabled by default.

SERVER = "smtp.example.com"FROM = "yourEmail@example.com"TO = ["listOfEmails"] # must be a listSUBJECT = "Subject"TEXT = "Your Text"# Prepare actual messagemessage = """From: %s\r\nTo: %s\r\nSubject: %s\r\n\%s""" % (FROM, ", ".join(TO), SUBJECT, TEXT)# Send the mailimport smtplibserver = smtplib.SMTP(SERVER)server.sendmail(FROM, TO, message)server.quit()

EDIT: this example uses reserved domains like described in RFC2606

SERVER = "smtp.example.com"FROM = "johnDoe@example.com"TO = ["JaneDoe@example.com"] # must be a listSUBJECT = "Hello!"TEXT = "This is a test of emailing through smtp of example.com."# Prepare actual messagemessage = """From: %s\r\nTo: %s\r\nSubject: %s\r\n\%s""" % (FROM, ", ".join(TO), SUBJECT, TEXT)# Send the mailimport smtplibserver = smtplib.SMTP(SERVER)server.login("MrDoe", "PASSWORD")server.sendmail(FROM, TO, message)server.quit()

For it to actually work with gmail, Mr. Doe will need to go to the options tab in gmail and set it to allow smtp connections.

Note the addition of the login line to authenticate to the remote server. The original version does not include this, an oversight on my part.


Check via Google, there are lots of examples, see here for one.

Inlined for ease of viewing:

import win32com.clientdef send_mail_via_com(text, subject, recipient, profilename="Outlook2003"):    s = win32com.client.Dispatch("Mapi.Session")    o = win32com.client.Dispatch("Outlook.Application")    s.Logon(profilename)    Msg = o.CreateItem(0)    Msg.To = recipient    Msg.CC = "moreaddresses here"    Msg.BCC = "address"    Msg.Subject = subject    Msg.Body = text    attachment1 = "Path to attachment no. 1"    attachment2 = "Path to attachment no. 2"    Msg.Attachments.Add(attachment1)    Msg.Attachments.Add(attachment2)    Msg.Send()