it-swarm.com.de

Tabelle als E-Mail-Text (nicht als Anhang) in Python

Meine Eingabedatei ist eine CSV-Datei. Durch Ausführen eines python Skriptes, das aus dem python Tabulate-Modul besteht, habe ich eine Tabelle erstellt, die wie folgt aussieht: -

tabulate_output oder

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

Ich möchte diese Tabelle in der E-Mail senden und nicht als Anhang mit Python.

Ich habe eine sendMail-Funktion erstellt und erwarte, dass die Tabelle in mail_body gesendet wird. sendMail([to_addr], from_addr, mail_subject, mail_body, [file_name])

14
Durvesh

Dieser Code sendet die Nachricht im typischen Nur-Text- und HTML-Multipart-/Alternativformat. Wenn Ihr Korrespondent dies in einem HTML-fähigen E-Mail-Reader liest, wird ihm die HTML-Tabelle angezeigt. Wenn er es als Klartextleser liest, sieht er die Klartextversion.

In beiden Fällen sieht er die im Nachrichtentext enthaltenen Daten und nicht als Anhang.

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]mail.com'

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ᵩ