发送图文并茂的html格式的邮件

news/2024/11/25 17:28:56/

本文介绍如何生成和发送包含图表和表格的邮件,涉及echarts图表转换为图片、图片内嵌到html邮件内容中、html邮件内容生成、邮件发送方法等

一、图表处理

因为html格式的邮件不支持echarts,也不支持js执行,所以图表需要转换为图片内嵌在邮件内容中
因为平台首页相关统计都是使用echarts渲染展示,为了减少后端接口兼容的工作量,我们使用pyecharts替代,这样就可以使用同样的数据结构和后端接口
pyecharts是python版本的echarts,配置项与echarts基本一致,具体使用方法可以参考官网 https://pyecharts.org/#/zh-cn/chart_api
我们实现的具体代码如下:
在这里插入图片描述
返回是图片的本地绝对路径

需要注意的是,pyecharts render之后生成的是html文件,是通过make_snapshot函数将html转换为图片
1、需要安装库:pyecharts + snapshot_selenium或者snapshot_phantomjs
2、make_snapshot第一个参数是转换引擎,可以使用snapshot_selenium 或者 snapshot_phantomjs
在这里插入图片描述
(1)如果使用snapshot_phantomjs,则需要使用npm安装phantomjs(linux环境同理)
(2)如果使用snapshot_selenium,则需要将浏览器驱动放到python路径下,比如我使用google浏览器,则下载对应版本的驱动chromedriver.exe,放在python.exe所在目录下(linux环境同理)
在这里插入图片描述

二、邮件内容生成

邮件内容最终是html格式,需要将图片和表格等数据全部填充好之后再发送
1、创建模板,需要根据数据实时填充的使用{{xxx}}标识
比如我的周报模板:

<html lang="en">
<head><meta charset="UTF-8"><title>专项检测周报</title>
</head>
<body>
<h2 style="font_size:30">【{{busi_plat}}】风险总数为:{{risk_total}}</h2>
<hr style="border: none; border-top: 1px solid #ccc; height: 1px; margin: 20px 0;">
<div>
<table style="cellpadding:0;border: 0px solid #ccc;width:100%"><tr><td align="center" valign="top"><a href="{{risk_level_pic_href}}"><img src="cid:{{risk_level_pic}}" width="720" height="400" alt="Image 1"></a></td><td align="center" valign="top"><a href="{{risk_status_pic_href}}"><img src="cid:{{risk_status_pic}}" width="720" height="400" alt="Image 2"></a></td></tr><tr><td align="center" valign="top"><a href="{{risk_busi_asc_pic_href}}"><img src="cid:{{risk_busi_asc_pic}}" width="720" height="400" alt="Image 1"></a></td><td align="center" valign="top"><a href="{{risk_check_tool_pic_href}}"><img src="cid:{{risk_check_tool_pic}}" width="720" height="400" alt="Image 2"></a></td></tr>
</table>
</div>
<div>
<hr style="border: none; border-top: 1px solid #ccc; height: 1px; margin: 10px 0;">
<h3 style="font_size:20">【风险类型汇总 TOP 10】</h3>
<table  width="100%" border="1" cellspacing="0" cellpadding="4">
<tr>
<th>序号</th>
<th>风险类型</th>
<th>发现工具</th>
<th>风险数量</th>
</tr>
{{risk_top_data}}
</table>
</div>
<div><hr style="border: none; border-top: 1px solid #ccc; height: 1px; margin: 10px 0;">
<h3 style="font_size:20">【军规汇总 TOP 10】</h3>
<table  width="100%" border="1" cellspacing="0" cellpadding="4">
<tr>
<th>序号</th>
<th>军规</th>
<th>发现工具</th>
<th>风险数量</th>
</tr>
{{army_top_data}}
</table>
</div>
<hr style="border: none; border-top: 1px solid #ccc; height: 1px; margin: 10px 0;">
<h3 style="font_size:20">【本周新增明细】</h3>
<a href="{{detail_href}}">按照风险等级排序,最多展示15条,更多详情和记录 点这里>>>></a>
<table  width="100%" border="1" cellspacing="0" cellpadding="4">
<tr>
<th>序号</th>
<th>业务方向</th>
<th>业务模块</th>
<th>发现工具</th>
<th>风险类型</th>
<th>风险明细</th>
<th>风险等级</th>
<th>状态</th>
<th>操作</th>
</tr>
{{detail_list_data}}
</table>
</body>
</html>

2、获取到统计数据之后,使用replace做替换,生成最终的html格式的邮件内容
在这里插入图片描述

三、发送邮件

在邮件内容中使用的图片需要作为附件一起发送,才能够在邮件中正常显示。
设置方法参考下图
在这里插入图片描述


http://www.ppmy.cn/news/586561.html

相关文章

遗传算法(Python)

import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D# 设定参数 DNA_SIZE 24 # DNA的长度 POP_SIZE 200 # 种群大小 CROSSOVER_RATE 0.8 # 交叉概率 MUTATION_RATE 0.005 # 变异概率 N_GENERATION…

EasyPoi导入Excel中的图片,空指针异常

官方文档&#xff1a; 1.1 介绍 - Powered by MinDoc 导入easypoi依赖&#xff0c;版本可以选择最新的 <!--easyPoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.1.2&l…

【SA8295P 源码分析】23 - QNX Ethernet MAC 驱动 之 emac1_config.conf 配置文件解析

【SA8295P 源码分析】23 - QNX Ethernet MAC 驱动 之 emac1_config.conf 配置文件解析 系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》 本文链接:《【SA8295P 源码分析】23 - QNX Ethernet MAC 驱动 之 emac1_config.conf 配置文件解析》 主要参数如下: hw_…

5分钟自建可视化平台,在线拖拽组件也太方便了!

一、前言 我们在完成 C 端用户的业务需求时&#xff0c;发现大量电商推广页面的逻辑复杂度和交互程度都比较低&#xff0c;却要消耗大量的开发资源。同时在后台管理系统的开发过程中&#xff0c;我们也发现一些相同套路的页面在不同场景下需要重复开发&#xff0c;即使我们封装…

emoji表情符号,unicode表情符号

目录 &#x1f60e;前言&#x1f468;‍&#x1f4bb;使用✈️Unicode 1.1 版本新增☙ Unicode 3.0 版本新增♻️Unicode 3.2 版本新增☕Unicode 4.0 版本新增&#x1f028;Unicode 5.1 版本新增⚽ Unicode 5.2 版本新增&#x1f30a;Unicode 6.0 版本新增&#x1f619;Unicode…

Redis 全面入门教程

目录 一、安装和启动 Redis二、Redis 基本操作1. 连接 Redis2. 设置和获取键值对3. 删除键值对4. 判断键是否存在&#xff1a;5. 设置键的过期时间&#xff1a;6. 查询键的剩余生存时间7. 查看所有键 三、数据结构和高级功能1. 字符串&#xff08;String&#xff09;2. 列表&am…

MySQL——函数与约束的讲解

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 前言 本章将会讲解MySQL数据库的函数与约束的讲解。 一.函数 函数 是指一段可以直接被另一…

神经网络分类问题应用:中风预测天气预测

任务1&#xff1a;中风预测 数据如下所示&#xff0c;标签stroke的取值为[0,1]&#xff0c;故为二分类问题。 id,gender,age,hypertension,heart_disease,ever_married,work_type,Residence_type,avg_glucose_level,bmi,smoking_status,stroke 1,Male,32,0,0,Yes,Private,Rural…