2017-03-24 67 views
1

我试图发送一个包含熊猫DataFrame的yagmail电子邮件,使用此帖中详述的方法:Python Email in HTML format mimelib yagmail在pandas DataFrame生成html之前添加额外换行符

但是,无论我尝试什么,yagmail都会在打印DataFrame之前添加一长串换行符。

我的代码是(我只改变我的安装的电子邮件地址):

#--- Addition to original post --- 
import pandas as pd 
df = pd.DataFrame([[900, 20.0], [500, 21.0]], columns =['Quantity', 'Price']) 
#--- Addition to original post --- 

import time 
import yagmail 
yag = yagmail.SMTP(username, password) 

text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttps://www.python.org" 
html = df.to_html() 

yag.send('[email protected]', "This a reminder call " + time.strftime("%c"), [text,html]) 

生成的电子邮件正文是:

>Hi! 
>How are you? 
>Here is the link you wanted: 
>https://www.python.org 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Quantity Price 
>0 900  20.0 
>1 500  21.0 

我也尝试添加一个DOCTYPE标签,编码作为utf-8,从unicode转换为字符串,但我没有成功。

这是一个错误,或任何人都可以帮助我的解决方案?

编辑#1: 请注意,HTML变量包含以下内容:

<table border="1" class="dataframe"> 
    <thead> 
    <tr style="text-align: right;"> 
     <th></th> 
     <th>Quantity</th> 
     <th>Price</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <th>0</th> 
     <td>900</td> 
     <td>20.0</td> 
    </tr> 
    <tr> 
     <th>1</th> 
     <td>500</td> 
     <td>21.0</td> 
    </tr> 
    </tbody> 
</table> 

编辑#2: 在我尝试添加HTML和文档类型标签,我尝试添加在下面详细说明html的开始和结束。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
     <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head> 
    <title>Title</title> 
</head> 
<body> 
... 
</body> 
</html> 

我确认这是有效的HTML here所得电子邮件正文是相似的。

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

























    Quantity Price 
0 900  20.0 
1 500  21.0 
+0

将'[text,html]'更改为'[html,text]'时的输出是什么。我问的原因是检查df是否是问题或者是否是yagmail。不幸的是,我看到很多尝试和错误! – MattR

+0

@MattR感谢您的建议。我将代码替换为最后一行:'yag.send('[email protected]',“This a call call”+ time.strftime(“%c”),[html])''。由此产生的电子邮件正文包含一系列换行符,然后在这里的底部 – CurryPy

+0

yagmail的作者的HTML表....这绝对是一个错误。我可以看到5'
'标签被添加。我无能为力。 – PascalVKooten

回答

0

太长评论:你可以做的一件事是在发送和手动删除空格之前创建一个输出变量。例如,在我过去构建的一个电子邮件程序中,我使用了easygui,并使用textbox为用户创建了他们的消息。然后发送该消息。我小例子:

import easygui as e 
text_mes= e.textbox("Add to the Email", "Create Your Email", html) 
yag.send('[email protected]', "This a reminder call " + time.strftime("%c"), [text,text_mes]) 

这将允许你手动删除行,直到你可以找到一个方法来创建一些代码来摆脱空间。

+0

感谢您花时间帮助我解决这个问题。我修改了帖子以显示html变量:它看起来很干净。所以没有什么可以删除的。 html变量是unicode,所以我试图在yagmail之前转换为字符串,并且还添加了.encode('utf-8'),但所有变体都产生相同的结果。我也尝试从表标记中删除边框和类标识符。 – CurryPy

相关问题