发送带有正文的表格的电子邮件,不带附件

时间:2019-02-26 14:50:00

标签: 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:

        {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()

它正在工作,但是电子邮件中没有任何分隔符,没有任何单元格,它看起来非常糟糕且不可读。

如何修复格式?

1 个答案:

答案 0 :(得分:1)

  CSV文件中的

问题。 -内有一张桌子-格式不错

使用pandas来获取texthtml表的示例。


  • 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
    
  • 格式化html

    html = df.to_html()
    
      

    输出

    <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>
    

使用Python测试:3.4.2