Questo codice invia il messaggio nel tipico testo normale più html multipart/formato alternativo. Se il tuo corrispondente lo legge in un lettore di posta compatibile con html, vedrà la tabella HTML. Se legge il lettore di testo semplice, vedrà la versione in testo normale.
In entrambi i casi, vedrà i dati inclusi nel corpo del messaggio e non come allegato.
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()
fonte
2016-07-08 22:30:59
Si potrebbe chiedere al destinatario di visualizzare la posta con il carattere a larghezza fissa e solo inserire la tabella nel corpo dell'e-mail. –
Perché non inviarlo come tabella html? – Arnial
Sarà necessario costruire la stringa HTML e inviarla attraverso l'intestazione Content-Type appropriata. [Un esempio qui] (https://github.com/supersaiyanmode/gapi/blob/master/GApi4Term/commands/email.py#L8). – SuperSaiyan