Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 发送正文中包含表格的电子邮件,不带附件_Python_Html_Email_Html Email - Fatal编程技术网

Python 发送正文中包含表格的电子邮件,不带附件

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:

我正在尝试从csv文件发送一封没有附件的电子邮件。此csv文件是一个3*9单元格+1标题行

我想以一种好的格式发送这种格式

这是我的代码:

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
标记您的问题。你考虑过升级吗?至少输出是您想要的吗?