Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send table as an email body (not attachment ) in Python

My input file is a CSV file and by running some python script which consists of the python Tabulate module, I have created a table that looks like this below:-

tabulate_output or

|    Attenuation |   Avg Ping RTT in ms |   TCP UP | |---------------:|---------------------:|---------:| |             60 |                2.31  | 106.143  | |             70 |                2.315 | 103.624  | 

I would like to send the this table in the email body and not as an attachment using python.

I have created a sendMail function and will be expecting to send the table in the mail_body. sendMail([to_addr], from_addr, mail_subject, mail_body, [file_name])

like image 817
Durvesh Avatar asked Jul 08 '16 21:07

Durvesh


People also ask

How do I create an email body in Python?

Set up a secure connection using SMTP_SSL() and . starttls() Use Python's built-in smtplib library to send basic emails. Send emails with HTML content and attachments using the email package.

How do you send a report via email in Python?

Let' create the sendemail function: line 2–6: Create the MIMEMultipart message object and load it with appropriate headers for From , To , and Subject fields. line 9: Add your message body. line 11–24: Add your attachment. line 29–34: Login to the mail server and send the email out.


1 Answers

This code sends the message in the typical plain text plus html multipart/alternative format. If your correspondent reads this in an html-aware mail reader, he's see the HTML table. If he reads it plain-text reader, he'll see the plain text version.

In either case, he will see the data included in the body of the message, and not as an attachment.

import csv from tabulate import tabulate from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib  me = '[email protected]' password = 'yyyzzz!!2' server = 'smtp.gmail.com:587' you = '[email protected]'  text = """ Hello, Friend.  Here is your data:  {table}  Regards,  Me"""  html = """ <html><body><p>Hello, Friend.</p> <p>Here is your data:</p> {table} <p>Regards,</p> <p>Me</p> </body></html> """  with open('input.csv') as input_file:     reader = csv.reader(input_file)     data = list(reader)  text = text.format(table=tabulate(data, headers="firstrow", tablefmt="grid")) html = html.format(table=tabulate(data, headers="firstrow", tablefmt="html"))  message = MIMEMultipart(     "alternative", None, [MIMEText(text), MIMEText(html,'html')])  message['Subject'] = "Your data" message['From'] = me message['To'] = you server = smtplib.SMTP(server) server.ehlo() server.starttls() server.login(me, password) server.sendmail(me, you, message.as_string()) server.quit() 
like image 107
Robᵩ Avatar answered Sep 19 '22 00:09

Robᵩ