yagmail在pandas DataFrame生成html之前添加额外的换行符

时间:2017-03-24 12:46:16

标签: python html email pandas yagmail

我正在尝试使用此帖中详述的方法发送包含pandas DataFrame的yagmail电子邮件:Python Email in HTML format mimelib

但是,无论我尝试什么,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('albalb@gmail.com', "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标记,编码为u​​tf-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和doctype标签,我尝试在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

1 个答案:

答案 0 :(得分:0)

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

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

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