Python 发送正文中包含表格的电子邮件,不带附件
我正在尝试从csv文件发送一封没有附件的电子邮件。此csv文件是一个3*9单元格+1标题行 我想以一种好的格式发送这种格式 这是我的代码:Python 发送正文中包含表格的电子邮件,不带附件,python,html,email,html-email,Python,Html,Email,Html Email,我正在尝试从csv文件发送一封没有附件的电子邮件。此csv文件是一个3*9单元格+1标题行 我想以一种好的格式发送这种格式 这是我的代码: me = 'email' password = 'password' server = 'smtp.gmail.com:587' you = 'email' text = """ Hello, Friend. Here is your data:
me = 'email'
password = 'password'
server = 'smtp.gmail.com:587'
you = 'email'
text = """
Hello, Friend.
Here is your data:
{0}
Regards,
Me"""
html = """
<html><body><p>Hello, Friend.</p>
<p>Here is your data:</p>
{0}
<p>Regards,</p>
<p>Me</p>
</body></html>
"""
with open('test.csv','r') as fin:
reader=csv.reader(fin, delimiter=',')
all_text = str()
for row in reader:
temp=list(row)
all_text+= '\n'.join(row)
text = text.format(all_text, tablefmt="grid")
html = html.format(all_text, tablefmt="html")
message = MIMEMultipart(
"alternative", None, [MIMEText(text), MIMEText(html,'html')])
message['Subject'] = "Your data"
message['From'] = me
message['To'] = you
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(me, password)
server.sendmail(me, you, message.as_string())
server.quit()
me='email'
密码='password'
服务器='smtp.gmail.com:587'
你=‘电子邮件’
text=”“”
你好,朋友。
以下是您的数据:
{0}
当做
“我”
html=”“”
你好,朋友
以下是您的数据:
{0}
问候,
我
"""
以open('test.csv','r')作为fin:
reader=csv.reader(fin,分隔符=',')
all_text=str()
对于读取器中的行:
临时=列表(行)
所有文本+='\n'。加入(行)
text=text.format(所有文本,tablefmt=“网格”)
html=html.format(所有文本,tablefmt=“html”)
message=MIMEMultipart(
“可选”,无,[MIMEText(text),MIMEText(html,'html'))
消息['Subject']=“您的数据”
消息['From']=我
信息['To']=您
server=smtplib.SMTP('SMTP.gmail.com',587)
server.ehlo()
server.starttls()
server.login(我,密码)
server.sendmail(我、你、message.as_string())
server.quit()
它正在工作,但在电子邮件中没有任何分隔符,没有任何单元格,看起来非常糟糕,无法阅读
我如何修正格式
问题来自csv文件。-正文中有一个表格-格式很好
使用pandas
获取text
和html
表格的示例
数据CSV
CSV = """Ville,Aire_urbaine,Pôle_urbain,Commune Paris,12.568.755,10.733.971,2.190.327 Lyon,2.310.850,1.651.365,515.695 Saint-Étienne,519.834,374.175,171.924 """
- 将
数据读取到CSV
pd.Dataframe
df = pd.read_csv(io.StringIO(CSV), sep=',')
- 格式
txt
输出:text = str(df) #text = df.to_string(index=False)
Ville Aire_urbaine Pôle_urbain Commune 0 Paris 12.568.755 10.733.971 2.190.327 1 Lyon 2.310.850 1.651.365 515.695 2 Saint-Étienne 519.834 374.175 171.924
<table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>Ville</th> <th>Aire_urbaine</th> <th>Pôle_urbain</th> <th>Commune</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>Paris</td> <td>12.568.755</td> <td>10.733.971</td> <td>2.190.327</td> </tr> ... (omitted for brevity) </tbody> </table>
- 格式
html
输出:html = df.to_html()
Ville Aire_urbaine Pôle_urbain Commune 0 Paris 12.568.755 10.733.971 2.190.327 1 Lyon 2.310.850 1.651.365 515.695 2 Saint-Étienne 519.834 374.175 171.924
<table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>Ville</th> <th>Aire_urbaine</th> <th>Pôle_urbain</th> <th>Commune</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>Paris</td> <td>12.568.755</td> <td>10.733.971</td> <td>2.190.327</td> </tr> ... (omitted for brevity) </tbody> </table>
维尔 艾尔乌尔班酒店 波尔乌尔班酒店 公社 0 巴黎 12.568.755 10.733.971 2.190.327 ... (为简洁起见省略)
使用Python测试:3.4.2尝试使用tablate()函数。这是一个指向类似答案的链接。
str.format
不接受关键字tablefmt
,该关键字看起来像是我尝试使用tablate的关键字,但不起作用。可能与使用内联CSS的表的代码重复。@Mr.D:“使用python 2.7时,它不起作用”:您没有用python-2.7
标记您的问题。你考虑过升级吗?至少输出是您想要的吗?