In this tutorial, we will discuss about how to send email to others with attachments by using our outlook email in python. To send plain text message email by outlook email, you can view this tutorial.
Send Email to Others by Outlook Email – Python SMTP Tutorial
If you want to send email with attachment, you should do by these steps.
Step 1. Set sender email and password
sender = "xxx@outlook.com" password = 'xxxxxxxx'
Step 2. Set receivers
receivers = ['tt@163.com','yy@126.com']
Step 3. Set attachment file
file_name = "F:\\D17-1052.pdf"
Step 4. Set outlook smtp server host and port
server_host = 'smtp.office365.com' server_port = 587
Step 5. Create email text content
#create MIMEMultipart object main_msg = email.mime.multipart.MIMEMultipart() #create a MIMEText object, it is the text content of email text_msg = email.mime.text.MIMEText("this is a email text content") #add MIMEText object to MIMEMultipart object main_msg.attach(text_msg)
Step 6. Create MIMEBase object to add attachment
contype = 'application/octet-stream' maintype, subtype = contype.split('/', 1) #read attachment content data = open(file_name, 'rb') file_msg = email.mime.base.MIMEBase(maintype, subtype) file_msg.set_payload(data.read( )) data.close( ) #file_msg is content of attachment email.encoders.encode_base64(file_msg) #attachment header basename = os.path.basename(file_name) file_msg.add_header('Content-Disposition', 'attachment', filename = basename) #add attachment to MIMEMultipart object main_msg.attach(file_msg)
Step 7. Set email format
main_msg['From'] = sender main_msg['To'] = ", ".join(receivers) main_msg['Subject'] = "This attachment sent from outlook" main_msg['Date'] = email.utils.formatdate( ) #full content of email fullText = main_msg.as_string()
Step 8. Send email
The full example code is here.
#!/usr/bin/python import smtplib import email.mime.multipart import email.mime.text import email.mime.base import os #set sender email and password sender = "xxx@outlook.com" password = 'xxxxxx' #set receivers receivers = ['ttt@163.com','ggg@126.com'] #set attachment file file_name = "F:\\D17-1052.pdf" #set outlook smtp server host and port server_host = 'smtp.office365.com' server_port = 587 #create email text content #create MIMEMultipart object main_msg = email.mime.multipart.MIMEMultipart() #create a MIMEText object, it is the text content of email text_msg = email.mime.text.MIMEText("this is a email text content") #add MIMEText object to MIMEMultipart object main_msg.attach(text_msg) #create MIMEBase object contype = 'application/octet-stream' maintype, subtype = contype.split('/', 1) #read attachment content data = open(file_name, 'rb') file_msg = email.mime.base.MIMEBase(maintype, subtype) file_msg.set_payload(data.read( )) data.close( ) #file_msg is content of attachment email.encoders.encode_base64(file_msg) #attachment header basename = os.path.basename(file_name) file_msg.add_header('Content-Disposition', 'attachment', filename = basename) #add attachment to MIMEMultipart object main_msg.attach(file_msg) #set email format main_msg['From'] = sender main_msg['To'] = ", ".join(receivers) main_msg['Subject'] = "This attachment sent from outlook" main_msg['Date'] = email.utils.formatdate( ) #full content of email fullText = main_msg.as_string() #send email by outlook smtp server = smtplib.SMTP(server_host, server_port) try: server.ehlo() server.starttls() server.ehlo() server.login(sender,password) server.sendmail(sender, receivers, fullText) print ("Successfully sent email") except SMTPException: print ("Error: unable to send email") finally: server.quit()
The result is:
Notice:
1.If you wan to send more files, you should use more main_msg.attach(file_msg) .
For example, if you use
main_msg.attach(file_msg) main_msg.attach(file_msg)
You will send two same files.