【问题标题】:Send table in pywin32 outlook email在 pywin32 Outlook 电子邮件中发送表格
【发布时间】:2019-07-11 02:37:03
【问题描述】:

我使用类似于以下代码的代码在 Python 中自动发送电子邮件。

如何使表格看起来像是从 excel 复制到电子邮件中(即表格格式)?目前它将 html 格式的表格视为电子邮件正文中的文本,这非常没用。

import win32com.client
import pandas as pd

#Parameters
data= [{'A' : 'data', 'B': 2, 'C':1.78},
      {'A' : 'data', 'B': 22, 'C':1.56},]
table = pd.DataFrame(data)

subject = 'email subject'
body = '<html><body>' + table.to_html() + '</body></html>'
recipient = 'email@domain.com'
attachments = []

#Create and send email
olMailItem = 0x0
obj = win32com.client.Dispatch("Outlook.Application")
newMail = obj.CreateItem(olMailItem)
newMail.Subject = subject
newMail.Body = body
newMail.To = recipient

for location in attachments:
    newMail.Attachments.Add(Source=location)

newMail.display()
newMail.Send()

当我希望它成为一个实际的表格时,发送一封看起来像这样的电子邮件:

<html><body><table border="1" class="dataframe"> 
  <thead> 
    <tr style="text-align: left;"> 
      <th>A</th> 
      <th>B</th> 
      <th>C</th> 
    </tr> 
  </thead> 
  <tbody> 
    <tr> 
      <td> data</td> 
      <td> 2</td> 
      <td> 1.78</td> 
    </tr>
    <tr> 
      <td> data</td> 
      <td> 22</td> 
      <td> 1.56</td> 
    </tr> 
  </tbody> 
</table></body></html> 

【问题讨论】:

    标签: python outlook pywin32


    【解决方案1】:

    我想出了如何做到这一点。原代码中需要修改一行代码。而不是使用:

    newMail.Body = body
    

    改为这样做:

    newMail.HTMLBody = body
    

    【讨论】:

    • 只是想说这对我有很大帮助,谢谢。我将其设置为提供前几天表现的摘要,并附上当天的原始数据。非常酷——这些东西过去我在 Excel 中需要很长时间才能完成,但现在它可以通过 pandas + 任务调度程序完全自动化。太棒了
    • 非常感谢,这对我帮助很大
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多