当前位置: 首页 > backend >正文

项目使用富文本编辑器发送邮件,邮箱无法预览

        项目中有一个问题:我们使用的富文本编辑器编辑好内容后,发送给用户的邮箱,其中如果有图片的话,图片内容无法显示,好奇怪呀!

        刚开始以为是邮箱配置的问题,所以我从网上搜了一堆如何配置邮箱,结果找到了这个帖子,让我恍然大悟:

        看的出网友也是被这个问题给摩擦的人,但是一语中的:现在邮箱基本不支持打开外部未知的链接了,因为我们用的富文本编辑器是Editor二次封装过来的,用的基本都是默认的配置,这个插件默认处理图片的是时候,是将图片处理成一个外部链接,这也就是为什么发到邮箱的图片没法预览了,那么好,我们该如何解决这个问题呢?毫无疑问,图片展示的时候除了用链接展示,还有一种方案:神奇的base64!

原理

        由于安全策略,邮箱会过滤掉外部的未知链接,如果我们直接在上传的时候将图片转换成base64不就行了嘛,因为base64实际上就是一串字符串,这样即可以回显图片,也能避免被邮箱的安全策略屏蔽掉。(亲测有效!)

实现

        既然知道原理了,那我们直接扒源码改造就行。废话不多说,直接上代码:

        首先找到Editor底层代码有个Editor.vue文件,在editorConfig编辑器配置器里面有个MENU_CONF配置,找到['uploadImage']属性加如下代码即可:

['uploadImage']: {server: getUploadUrl(),
// 单个文件的最大体积限制,默认为 2MmaxFileSize: 5 * 1024 * 1024,
// 最多可上传几个文件,默认为 100maxNumberOfFiles: 10,
// 选择文件时的类型限制,默认为 ['image/*'] 。如不想限制,则设置为 []allowedFileTypes: ['image/*'],
// 自定义增加 http  headerheaders: {Accept: '*',Authorization: 'Bearer ' + getRefreshToken(), // 使用 getRefreshToken() 方法,而不使用 getAccessToken() 方法的原因:Editor 无法方便的刷新访问令牌'tenant-id': getTenantId()},
// 超时时间,默认为 10 秒timeout: 15 * 1000, // 15 秒
// form-data fieldName,后端接口参数名称,默认值wangeditor-uploaded-imagefieldName: 'file',
// 上传之前触发onBeforeUpload(file: File) {return file},
// 上传进度的回调函数onProgress(progress: number) {
// progress 是 0-100 的数字console.log('progress', progress)},onSuccess(file: File, res: any) {console.log('onSuccess', file, res)},onFailed(file: File, res: any) {console.log('onFailed------', file, res)},onError(file: File, err: any, res: any) {if (err.message.includes('exceeds maximum allowed size')) {message.error('公告内容中上传文件不可大于5MB')} else {message.error('上传失败,请检查文件格式或网络')}return},
// 自定义插入图片customInsert: async (res: any, insertFn: InsertFnType) => {console.log('-edit----------', res);console.log('-edit----------', props.imgToBase64);if(!props.imgToBase64){insertFn(res.data, 'image', res.data);} else {try {const response = await fetch(res.data);const blob = await response.blob();const reader = new FileReader();reader.onloadend = () => {const base64Data = reader.result as string;insertFn(base64Data, 'image', base64Data);};reader.readAsDataURL(blob);} catch (error) {console.error('转换为 Base64 时出错:', error);message.error('转换图片为 Base64 格式失败,请检查网络');}}}// customInsert(res: any, insertFn: InsertFnType) {//   console.log('-edit----------', res)//   insertFn(res.data, 'image', res.data)// }
},
http://www.xdnf.cn/news/9962.html

相关文章:

  • Parasoft C++Test软件单元测试_常见问题及处理
  • MySQL 8.0中的mysql.ibd文件
  • 深度学习目标检测实战——YOLOv8从入门到部署
  • linux 1.0.3
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 6】【bt_vendor_opcode_t 介绍】
  • oracle 导入导出 dmp 数据文件实战
  • 树型表查询方法 —— SQL递归
  • RockyLinux9安装Docker
  • 进阶智能体实战八、需求分析助手(基于qwen多模态大模型对图文需求文档分析)(帮你生成 模块划分+页面+表设计、状态机、工作流、ER模型)
  • 摄像头模块的镜头类型
  • Git 全平台安装指南:从 Linux 到 Windows 的详细教程
  • PCIe走线注意事项
  • 【动态规划:斐波那契数列模型】第 N 个泰波那契数
  • 英语学习5.29
  • Java开发经验——阿里巴巴编码规范实践解析5
  • 数字人系统源码搭建步骤
  • NHANES指标推荐:UAR
  • LINUX中TOMCAT安装和Nginx源码安装
  • 【深度学习】12. VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4
  • docker-compose部署SpringBoot项目的两种方式(构建镜像和挂载文件)
  • Python打卡第39天
  • Futaba乐迪小飞象Frsky7通多协议接收机KA6说明书
  • hf-mirror断点续传下载权重
  • AAOS系列之(六) ---CarPowerManager中写入的状态,如何在ViewRootImpl中读取问题
  • [git]忽略.gitignore文件
  • 软件项目需求说明书简要模板
  • 【Redis】大key问题详解
  • 【计网】分片
  • websocket在vue中的使用步骤,以及实现聊天
  • MaaS(模型即服务)是什么?