web-dev-qa-db-fra.com

Envoyer la table sous forme de corps d'e-mail (pas de pièce jointe) dans Python

Mon fichier d'entrée est un fichier CSV et en exécutant un script python qui se compose du module python Tabulate), j'ai créé un tableau qui ressemble à ceci ci-dessous: -

tabulate_output ou

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

Je voudrais envoyer ce tableau dans le corps de l'e-mail et pas en tant que pièce jointe en utilisant python.

J'ai créé une fonction sendMail et je m'attends à envoyer la table dans le mail_body. sendMail([to_addr], from_addr, mail_subject, mail_body, [file_name])

14
Durvesh

Ce code envoie le message au format texte ordinaire plus format multipart/alternatif html. Si votre correspondant lit ceci dans un lecteur de messagerie compatible HTML, il voit le tableau HTML. S'il le lit en lecteur de texte brut, il verra la version en texte brut.

Dans les deux cas, il verra les données incluses dans le corps du message, et non sous forme de pièce jointe.

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()
21
Robᵩ