在outlook中自动发送matplotlib图表

txu3uszq  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(134)

我在matplotlib中创建了一个图表,我想自动发送。
我已经将图表转换为png,然后将其保存为变量,如下所示:

chart = io.BytesIO()
plt.savefig(chart, format='png')
chart.seek(0)
im = Image.open(chart)

def get_plot():
    return im

它不需要以png格式来完成任务,我只是认为将其保存为该格式是存储它的最佳方式。
然后,我设置了自动生成的电子邮件(今天是一个变量,它保存了当天的日期):

def Emailer(text, subject, recipient):
     outlook = win32com.client.Dispatch('outlook.application')
     mail = outlook.CreateItem(0)
     mail.To = recipient
     mail.Subject = subject
     mail.HtmlBody = text
     mail.Display(True)
    
    MailSubject= "Auto test mail at "+today
    MailInput=im
    MailAdress='recipient@guyIwanttosendemailsto.com'
    
    Emailer(MailInput, MailSubject, MailAdress )

不幸的是,当我运行代码时,我得到一个错误消息说:

TypeError: Objects of type 'PngImageFile' can not be converted to a COM VARIANT (but obtaining the buffer() of this object could)

如果我没有'im'变量在'MailInput'的电子邮件工作完全按照预期。我想知道你们中是否有人对如何完成这项任务有一些建议?

7vux5j2d

7vux5j2d1#

所以我能够通过将图表保存到桌面来解决这个问题:

plt.savefig('chart.png')

然后按如下方式更改'MailInput'行(user是另一个动态变量):

MailInput='<html><body><img src="C:\\Users\\'+user+'\\Desktop\\chart.png" style="width:100%"/></p></body></html>'

相关问题