你是否还在为系统邮件发送效率低、格式混乱、故障难排查而烦恼?ruoyi-vue-pro内置的企业级邮件系统,通过模板化设计+全链路日志,让通知类邮件开发效率提升80%。本文将带你从0到1掌握邮件模板配置、动态参数替换、发送状态监控的核心技巧,读完即可解决90%的邮件发送场景需求。
ruoyi-vue-pro邮件系统基于Spring生态构建,核心依赖spring-boot-starter-mail组件实现底层发送能力,结合系统自研的模板引擎与日志模块,形成完整的邮件生命周期管理体系。
<!-- 邮件核心依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>依赖配置文件:yudao-module-system/pom.xml
系统架构采用三层设计:
邮件服务配置位于系统参数管理模块,支持多环境动态切换。核心配置项包括:
参数名
说明
示例值
spring.mail.host
SMTP服务器地址
smtp.qq.com
spring.mail.port
端口号
465
spring.mail.username
发件人邮箱
service@ruoyi.vip
spring.mail.password
授权码
xxxxxxxx
spring.mail.properties.mail.smtp.ssl.enable
SSL加密
true
系统提供可视化模板编辑器,支持HTML格式与Velocity表达式。典型模板结构如下:
<!DOCTYPE html><html><head> <title>用户注册成功通知</title></head><body> <h3>尊敬的${username},您好!</h3> <p>您的账号${account}已成功注册,激活链接:<a href="${activeUrl}">点击激活</a></p> <p>此邮件为系统自动发送,请勿回复</p></body></html>模板文件存储路径:yudao-module-system/src/main/resources/templates/mail/,支持按业务模块分类管理。
邮件发送核心逻辑封装在MailService接口中,默认实现类为MailServiceImpl:
@Servicepublic class MailServiceImpl implements MailService { @Autowired private JavaMailSender mailSender; @Autowired private TemplateEngine templateEngine; @Autowired private SysMailLogMapper mailLogMapper; @Override @Async // 异步发送,避免阻塞主线程 public void sendTemplateMail(MailTemplateDTO templateDTO, Map<String, Object> params) { // 1. 构建邮件消息 MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); // 2. 设置基础信息 helper.setFrom(fromAddress); helper.setTo(templateDTO.getTo()); helper.setSubject(templateDTO.getSubject()); // 3. 渲染模板内容 String content = templateEngine.process(templateDTO.getTemplatePath(), new Context(Locale.CHINA, params)); helper.setText(content, true); // 第二个参数表示HTML内容 // 4. 发送邮件并记录日志 try { mailSender.send(message); logSuccess(templateDTO, params, null); } catch (Exception e) { log.error("邮件发送失败", e); logFailure(templateDTO, params, e.getMessage()); throw new ServiceException("邮件发送失败:" + e.getMessage()); } }}每次邮件发送都会生成详细日志,存储在sys_mail_log表中,包含以下关键信息:
字段名
类型
说明
id
bigint
日志ID
template_id
bigint
模板ID
to_address
varchar
收件人地址
subject
varchar
邮件主题
content
text
发送内容
send_time
datetime
发送时间
status
tinyint
发送状态(0-失败,1-成功)
error_msg
varchar
错误信息
create_by
varchar
创建人
日志查询界面支持按时间段、状态、收件人等多维度筛选,帮助快速定位问题。
@Async注解实现异步处理,配置线程池参数优化并发能力系统管理 > 参数设置 > 邮件配置确认SMTP参数正确性系统监控 > 邮件日志中搜索对应记录,检查错误信息spring.mail.max-file-size调整结合系统定时任务功能,可实现邮件的定时发送:
@JobHandler("mailSendJob")@Componentpublic class MailSendJob extends IJobHandler { @Autowired private MailService mailService; @Autowired private SysMailTaskMapper mailTaskMapper; @Override public ReturnT<String> execute(String param) { // 查询待发送的定时邮件任务 List<SysMailTask> tasks = mailTaskMapper.selectBySendTimeBefore(new Date()); for (SysMailTask task : tasks) { try { mailService.sendTemplateMail(buildDTO(task), JSON.parseObject(task.getParams(), Map.class)); mailTaskMapper.updateStatus(task.getId(), 2); // 标记为已发送 } catch (Exception e) { log.error("定时邮件发送失败", e); mailTaskMapper.updateStatus(task.getId(), 3); // 标记为失败 } } return SUCCESS; }}系统支持邮件模板的版本控制,每次修改自动创建新版本,可回滚至历史版本。版本信息存储在sys_mail_template_version表中,包含修改人、修改时间、内容差异等信息。
ruoyi-vue-pro邮件系统通过模板化+日志化的设计理念,解决了企业级应用中邮件发送的核心痛点。目前已支持用户注册、密码重置、订单通知、系统告警等10+典型场景,日均处理邮件量可达10万+级别。
未来版本计划引入以下增强功能:
通过本文介绍的方法,你可以快速在项目中集成企业级邮件能力,无论是用户通知、业务提醒还是系统告警,都能轻松应对。立即访问系统文档,开始你的高效邮件开发之旅吧!
原网址: 访问
创建于: 2026-01-07 13:20:47
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论