我正在尝试通过Outlook电子邮件作为主体发送散景图。 而且,散景图我已经生成为HTML文件。 我想将嵌入的电子邮件作为电子邮件正文发送出去。
我尝试使用read命令读取HTML文件,并提供与htmlbody相同的内容。但是,它在电子邮件中为空白。 一无所有。 下面是我尝试的代码。
import win32com.client as win32
import psutil
import os
import subprocess
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'ABC@XYZ.com'
mail.Subject = 'Sent through Python'
html_url='C:/Users/ABC/Documents/XYZ/test.htm'
with open(html_url, 'r') as myfile:
data=myfile.read()
mail.HTMLBody = data
mail.send
然后尝试了以下操作...但是电子邮件正文仍为空白。.知道出了什么问题吗???
from bokeh.embed import components
from jinja2 import Template
from bokeh.resources import INLINE
from bokeh.plotting import figure
from bokeh.io import output_file,show,output_notebook
import win32com.client as win32
import psutil
import os
import subprocess
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'ABC@XYZ.com'
mail.Subject = 'Sent through Python'
def get_plot_components() :
# build your plot here
plot = figure()
plot.circle([2,3,4],[5,6,7])
show(plot)
script, div = components(plot)
return script, div
template = Template('''
<div id='bokeh_plot_for_the_body'>
{{ resources | safe }}
{{ div | safe }}
{{ script | safe }}
</div>
''')
script, div = get_plot_components()
outlook_body = template.render(resources = INLINE.render(),
script = script,
div = div)
mail.HTMLBody = outlook_body
mail.send
答案 0 :(得分:0)
我没有要测试的Windows机器,但我认为问题可能是您试图将Bokeh生成的完整HTML页面嵌入到Outlook生成的另一个HTML文件的主体中。这样您就会得到:
<!DOCTYPE html>
<html lang='en'>
<head>
<title>Outlook Message</title>
</head>
<body>
<!DOCTYPE html>
<html lang='en'>
<head>
<title>Bokeh Plot</title>
</head>
<body>
<div id=plot>
<script id=bokeh_script>
</script>
</div>
</body>
</html>
</body>
</html>
我建议通过添加返回bokeh组件的函数,将bokeh脚本与发送Outlook消息的脚本合并:
from bokeh.embed import components
from jinja2 import Template
from bokeh.resources import INLINE
import win32com.client as win32
import psutil
import os
import subprocess
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'ABC@XYZ.com'
mail.Subject = 'Sent through Python'
html_url='C:/Users/ABC/Documents/XYZ/test.htm'
with open(html_url, 'r') as myfile:
data=myfile.read()
def get_plot_components()
# build your plot here
script, div = components(plot)
return script, div
template = Template('''
<div id='bokeh_plot_for_the_body'>
{{ resources | safe }}
{{ div | safe }}
{{ script | safe }}
</div>
''')
script, div = get_plot_components()
outlook_body = template.render(resources = INLINE.render(),
script = script,
div = div)
mail.HTMLBody = outlook_body
mail.send
答案 1 :(得分:0)
您需要添加编码并打开模板文件。
示例:
html_url= open('C:/Users/ABC/Documents/XYZ/test.htm', encoding='utf16')
data=html_url.read()
对我有用。
答案 2 :(得分:0)
由于安全威胁,没有电子邮件客户端允许运行脚本,因此看起来无法实现。唯一的出路是在电子邮件中附加html文件或提供html链接。