谷歌邮箱无法显示使用 Base64 处理的图片的正确解决方法
谷歌邮箱无法显示使用 Base64 处理的图片的正确解决方法
前文
本次做了一下邮件发送,邮件中包含自定义模板和logo,初始logo使用的是url地址,但后期思考,如果地址失效或者网络问题等则会导致logo无法显示,于是乎就将logo改为了base64的形式,本以为天衣无缝,结果遇到了google邮箱,src属性直接丢失。
这里经过查询是因为,Google不兼容base64形式的编码头且路径必须使用https开头,那怎么办呢?可以使用静态文件的形式,发送文件。
1、为了使得代码不要重复修改,将插入图片文件可以配置,resource目录下定义json配置文件。
[{"fileName": "email-template-logo.png","filePath": "email/image/email-template-logo.png"}
]
2、项目启动时,将文件内容写入缓存
//省略部分工具代码
/** 邮件内嵌文件缓存 */
private static Map<String, File> templateInlineCache = new HashMap<>();private static synchronized void init() {String rs = readFile(emailConfig.getTemplateInlineConfigFile());if(StringUtil.isNotEmpty(rs)) {try {JSONArray array = JSON.parseArray(rs);for (Object obj : array) {JSONObject json = (JSONObject) obj;String fileName = json.getString("fileName");String filePath = ResourceUtil.getResourcePath(json.getString("filePath"), EmailTemplateUtil.class);File file = new File(filePath);if(file.exists()) {templateInlineCache.put(fileName, file);}else {log.error("邮件内嵌文件不存在: filePath={}", filePath);}}} catch (Exception e) {log.error("邮件内嵌文件配置解析异常,请检查格式: ConfigFile={}", emailConfig.getTemplateInlineConfigFile(), e);}}}
3、发送邮件时,新增inline属性
//省略部分发送代码
private static JavaMailSenderImpl javaMailSender = SpringUtil.getBean(JavaMailSenderImpl.class);
// 开始发送邮件
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
// 添加内嵌文件
Map<String, File> files = EmailTemplateUtil.getInlineFiles();
for (Entry<String, File> file : files.entrySet()) {mimeMessageHelper.addInline(file.getKey(), file.getValue());
}
javaMailSender.send(mimeMessage);
4、邮件模板也需要修改
logo这里只需要改为cid:上述添加的key即可,但是需要主要这个key需要带上后缀,否则src依旧会消失
<img src='cid:email-template-logo.png' width=300px height=40px>
5、如果本地需要新增预览功能,则cid:key的形式是无法展示的,所以在本地展示的时候,可以把这里在转为base64的形式就可以正常访问。
String base64 = "";
//key为src内部内容
String emailContent = content.replace("key",base64);
6、即可验证,这样发送出去的邮件就会被目标邮件服务器代理成自己的地址
Google邮箱:
QQ邮箱:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dbyO7O0l-1611716661790)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20210127105523994.png)]
因为现在大多都是继承spring的邮件发送,所以本文以spring的邮件发送为demo进行试验,需要源码可以私信。
谷歌邮箱无法显示使用 Base64 处理的图片的正确解决方法相关推荐
- 笔记本网络计算机和设备不可见,xp电脑不显示无线网络的七种原因和解决方法...
xp纯净版系统电脑打开后发现桌面右下角不显示无线网络,如果要设置无线网络都不知道从哪里下手,这到底是怎么回事?造成xp系统不显示无线网络的原因有很多种,下面和大家讲解一下xp电脑不显示无线网络的七种原 ...
- 怎么在win7链接无线网络连接服务器,Win7系统网络连接一直显示正在获取网络地址但是连不上网解决方法...
电脑上不了网的原因很多,比如是网络设置问题.路由器问题.运营商问题.最近一个Win7用户,网络连接一直显示,正在获取网络地址但是连不上网,但是其它电脑可以上网,那么说明是电脑设置问题,那么该如何解决呢 ...
- eclipse打开后显示 Failed to create the part‘s controls 解决方法
eclipse打开后显示 Failed to create the part's controls 解决方法 参考文章: (1)eclipse打开后显示 Failed to create the pa ...
- 运行adb devices命令后 显示 List of devices attached 无法获取设备解决方法
运行adb devices命令后 显示 List of devices attached 无法获取设备解决方法 参考文章: (1)运行adb devices命令后 显示 List of devices ...
- 启动mysql时显示:/tmp/mysql.sock 不存在的解决方法
启动mysql时显示:/tmp/mysql.sock 不存在的解决方法 参考文章: (1)启动mysql时显示:/tmp/mysql.sock 不存在的解决方法 (2)https://www.cnbl ...
- gFTP不能显示中文文件(夹)名的解决方法
gFTP不能显示中文文件(夹)名的解决方法 现象:Ylmf OS 2.0 中预装的gFTP在登录远程服务器后,中文文件夹及中文文件名不能显示. 原因:非root身份登录 解决:用root登录,后登录g ...
- GX works2 三菱PLC 显示注释后代码行变宽的解决方法
GX works2 三菱PLC 显示注释后代码行变宽的解决方法 解决前 没显示注释前 --------------------------------------------------------- ...
- outlook你的邮件服务器证书无效,Outlook添加网易邮箱账号提示服务器的加密连接不可用的解决方法...
Outlook添加网易邮箱账号提示"服务器的加密连接不可用"的解决方法 发布日期:2018-12-10 outlook邮件服务器的加密连接不可用该怎么办?outlook邮箱经常添加 ...
- win10任务栏图标显示异常(重启资源管理器无果)解决方法
win10任务栏图标显示异常(重启资源管理器无果)解决方法 方法1: - Ctrl+Win+R打开任务管理器 - 点击[文件],点击[运行新任务],输入[Explorer],运行,此刻可以看到Wind ...
- linux终端能显示中文,但是不能输入中文的解决方法
linux终端能显示中文,但是不能输入中文的解决方法 linux终端能显示中文,但是不能输入中文的解决方法 第一种方法:修改用户目录下的.inputrc文件允许 8bit 输入即可 第二种方法(不建议 ...
最新文章
- 几个表示“光”的概念
- 第十六届全国大学生智能汽车竞赛-航天智慧物流创意组 线下选拔赛赛题发布!
- linux 修改时区_如何在 Ubuntu 20.04 上设置或者修改时区
- 基于mjpg-streamer网络视频服务器移植
- 不错的秒杀系统架构分析与实战!
- python网上编程课程-什么是Python编程课程
- 【矩阵】概念的理解 —— span、基
- 程序员面试金典 - 面试题 16.13. 平分正方形(数学)
- Spring Cloud Config采用数据库存储配置内容【Edgware+】
- mysqlfront连接MySQL错误_使用MySql-Front远程连接MySQL失败的解决办法
- linux 文件隐藏权限,linux文件基本权限、默认权限、隐藏权限和ACL权限
- 连接SQL SERVER的时候登录名如何清除
- PPPOE拨号之一:Cisco 路由器adsl拨号配置
- 实数在计算机上存储,实数如何在内存中存储
- Kafka拉取某一个时间段內的消息
- Linux 安装qq农场小游戏
- 使用Arduino Motor Shield控制步进制电机
- python基础——数据可视化
- ASO优化在大数据时代应该怎么操作,aso优化如何操作
- 拯救者Y7000安装ubuntu时出现的问题