Как вставить CSV-файл в таблицу HTML внутри электронного письма? - PullRequest
2 голосов
/ 18 июня 2020

Я использую пакет email в Python для отправки некоторых писем. Я могу отправлять электронные письма с вложениями в формате .csv, но они всегда отображаются в верхней части письма. Однако мне нужно вставить вложение в таблицу, но я не могу понять, как это сделать. Я бы хотел, чтобы он выглядел так: Пример письма с вложением

Вот код, который я сейчас использую:

import smtplib
from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase

msg = MIMEMultipart('alternative')
msg['From'] = 'from@example.com'
msg['To'] = 'to@example.com'
msg['Subject'] = 'Request'

with open('dataexample.csv') as attachment:
    part = MIMEBase('application', 'octet-stream')
    part.set_payload(attachment.read())

# Add header
part.add_header("Content-Disposition", f"attachment; filename= dataexample.csv",)
encoders.encode_base64(part)
msg.attach(part)

# html version of message
html = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table {
        border-collapse: collapse;
        }
        table, td {
        border: 1px solid black;
        }
    </style>
</head>
<body>
<table style="width:100%;">
    <tr>
        <td>First Column First Row</b></td>
        <td>Second Column First Row</td>
    </tr>
    <tr>
        <td>First Column Second Row</td>
        <td></td>  # i want the csv file to be embedded in this cell of the table
</table>
</body>
</html>
"""

msg.attach(MIMEText(html, 'html'))
server = smtplib.SMTP(host='host', port=25)
server.send_message(msg)

1 Ответ

0 голосов
/ 18 июня 2020

Вы можете использовать Pandas, чтобы получить строковое представление HTML файла CSV:

import pandas as pd

df = pd.read_csv('my.csv', header=None) # change options if needed...
html = df.to_html() # also has lots of nifty options

См. pandas .read_csv и pandas .DataFrame.to_ html

Вы можете просто добавить эту строку ко всему, что вам нужно для электронного письма.

...