ruoyi-vue-pro 开发指南 ruoyi-vue-pro 开发指南
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 商城手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 2.x
  • 前端手册 Vue 3.x
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 商城手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben(ant-design-vue) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 商城手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 2.x
  • 前端手册 Vue 3.x
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 商城手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben(ant-design-vue) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读

    • 简介
    • 交流群
    • 视频教程
    • 功能列表
    • 快速启动(后端项目)
    • 快速启动(前端项目)
    • 接口文档
    • 技术选型
    • 项目结构
    • 代码热加载
    • 一键改包
    • 删除功能
    • 内网穿透
    • 达梦数据库专属
  • 后端手册

    • 新建模块
    • 代码生成【单表】(新增功能)
    • 代码生成【主子表】
    • 代码生成(树表)
    • 功能权限
    • 数据权限
    • 用户体系
    • 三方登录
    • OAuth 2.0(SSO 单点登录)
    • SaaS 多租户【字段隔离】
    • SaaS 多租户【数据库隔离】
    • WebSocket 实时通信
    • 异常处理(错误码)
    • 参数校验
    • 分页实现
    • 文件存储(上传下载)
    • Excel 导入导出
    • 系统日志
    • MyBatis 数据库
    • MyBatis 联表&分页查询
    • 多数据源(读写分离)
    • Redis 缓存
    • 本地缓存
    • 异步任务
    • 配置管理
    • 工具类 Util
    • 单元测试
    • 分布式锁
    • 幂等性(防重复提交)
    • 数据库文档
    • 验证码
  • 中间件手册

    • 定时任务
    • 消息队列(内存)
    • 消息队列(Redis)
    • 消息队列(RocketMQ)
    • 消息队列(RabbitMQ)
    • 消息队列(Kafka)
    • 限流熔断
  • 工作流手册

    • 工作流(Flowable)会签、或签
  • 商城手册

    • 商城演示
    • 功能开启
  • 大屏手册

    • 报表设计器
    • 大屏设计器
  • 支付手册

    • 功能开启
    • 支付宝支付接入
    • 微信公众号支付接入
    • 微信小程序支付接入
    • 支付宝、微信退款接入
  • 公众号手册

    • 功能开启
    • 公众号接入
    • 公众号粉丝
    • 公众号标签
    • 公众号消息
    • 自动回复
    • 公众号菜单
    • 公众号素材
    • 公众号图文
    • 公众号统计
  • 系统手册

    • 短信配置
    • 邮件配置
      • 1. 表结构
      • 2. 实现原理
      • 3. 邮箱配置
        • 3.1 新建邮箱账号
        • 3.2 新建邮箱模版
        • 3.3 查看邮件日志
      • 4. 邮件发送
        • 4.1 MailSendApi
        • 4.2 接入示例
      • 5. 邮箱平台附录
    • 站内信配置
    • 数据脱敏
    • 敏感词
    • 地区 & IP 库
  • 运维手册

    • 开发环境
    • Linux 部署
    • Docker 部署
    • Jenkins 部署
    • HTTPS 证书
    • 服务监控
  • 前端手册 Vue 3.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • CRUD 组件
    • 国际化
    • IDE 调试
    • 代码格式化
  • 前端手册 Vue 2.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
  • 更新日志

    • 【v1.9.0】开发中
    • 【v1.8.3】2023-10-24
    • 【v1.8.2】2023-09-24
    • 【v1.8.1】2023-09-04
    • 【v1.8.0】2023-07-27
  • 开发指南
  • 系统手册
芋道源码
2023-01-26
目录

邮件配置

本章节,介绍项目的邮件功能。它在管理后台有三个菜单,分别是:

① 邮箱账号:配置邮件的发送账号

邮箱账号

② 邮件模版:管理邮件的内容模版

邮件模版

③ 邮件记录:查看邮件的发送记录

邮件记录

# 1. 表结构

表结构

# 2. 实现原理

邮件功能提供统一的 API 给其它模块,使它们可以快速实现发送邮件的功能,无需关心不同邮件平台的具体对接。

邮件采用异步发送,基于 消息队列,如下图所示:

实现原理

  • 前端代码:views/system/mail (opens new window)
  • 后端代码:controller/admin/mail (opens new window)

最终使用 Hutool 的 MailUtil (opens new window) 发送邮件。

# 3. 邮箱配置

本小节,讲解如何配置邮件功能,整个过程如下:

  1. 新建一个邮箱【账号】,配置邮件的发送账号
  2. 新建一个邮件【模版】,配置邮件的内容模版
  3. 测试该邮件模板,查看对应的邮件【日志】,确认是否发送成功

# 3.1 新建邮箱账号

① 点击 [系统管理 -> 邮件管理 -> 邮箱账号] 菜单,查看邮箱账号的列表。如下图所示:

邮箱账号

② 点击 [新增] 按钮,添加一个邮箱账号,并填写信息如下图:

新增邮箱账号

友情提示:

邮件发送基于 SMTP (opens new window) 协议实现,需要开通账号的 STMP 服务。例如说:

网易 163 邮箱的 SMTP 服务

不同邮件平台的 SMTP 配置,可见 「5. 邮箱平台附录」 小节。

③ 新增完成后,确认你的邮箱账号是否可以发送邮件,可通过如下代码:

import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;

@Test
public void testDemo() {
    MailAccount mailAccount = new MailAccount()
//                .setFrom("奥特曼 <ydym_test@163.com>")
            .setFrom("ydym_test@163.com") // 邮箱地址
            .setHost("smtp.163.com").setPort(465).setSslEnable(true) // SMTP 服务器
            .setAuth(true).setUser("ydym_test@163.com").setPass("WBZTEINMIFVRYSOE"); // 登录账号密码
    String messageId = MailUtil.send(mailAccount, "7685413@qq.com", "主题", "内容", false);
    System.out.println("发送结果:" + messageId);
}

# 3.2 新建邮箱模版

① 点击 [系统管理 -> 邮箱管理 -> 邮件模板] 菜单,查看邮件模板的列表。如下图所示:

邮件模版

② 点击 [新增] 按钮,选择刚创建的邮箱账号,并填写信息如下图:

邮件模板的新增

  • 邮箱账号:发送该邮件模板时,使用的邮件账号,即使用哪个邮箱进行发送邮件
  • 模版编号:邮件模板的唯一标识,使用邮件 API 时,通过它标识使用的邮件模板
  • 发件人名称:发送邮件显示的发件人名字
  • 模板内容:邮件模板的内容,使用 {var} 作为占位符,例如说 {name}、{code} 等
  • 开启状态:邮件模板被禁用时,该邮件模板将不发送邮件,只记录邮件日志

疑问:为什么设计邮件模板的功能?

在一些场景下,产品会希望修改发送邮件的标题、内容,甚至邮箱账号,此时只需要修改邮件模版的对应属性,无需重启应用。

# 3.3 查看邮件日志

① 点击 [测试] 按钮,输入测试的收件邮箱地址,进行该邮件模板的模拟发送。如下图所示:

测试邮件

② 打开收件邮箱,查看邮件是否发送成功。如下图所示:

邮件箱

③ 点击 [系统管理 -> 邮箱管理 -> 邮件日志] 采单,可以查看到每条邮件的发送状态。如下图所示:

邮件发送日志

# 4. 邮件发送

# 4.1 MailSendApi

邮箱配置完成后,可使用 MailSendApi (opens new window) 进行邮件的发送,支持多种用户类型。它的方法如下:

MailSendApi

# 4.2 接入示例

以 yudao-module-infra 模块,需要发邮件为例子,讲解 SmsCodeApi 的使用。

① 在 yudao-module-infra-biz 模块的 pom.xml (opens new window) 引入 yudao-module-system-api 依赖,如所示:

<dependency>
    <groupId>cn.iocoder.boot</groupId>
    <artifactId>yudao-module-system-api</artifactId>
    <version>${revision}</version>
</dependency>

② 在代码中注入 SmsCodeApi Bean,并调用发送邮件的方法。代码如下:

public class TestDemoServiceImpl implements TestDemoService {

    // 0. 注入 MailSendApi Bean
    @Resource
    private MailSendApi mailSendApi;

    public void sendDemo() {
        // 1. 准备参数
        Long userId = 1L; // 示例中写死,你可以改成你业务中的 userId 噢
        String templateCode = "test_01"; // 邮件模版,记得在【邮箱管理】中配置噢
        Map<String, Object> templateParams = new HashMap<>();
        templateParams.put("key1", "奥特曼");
        templateParams.put("key2", "变身");

        // 2. 发送邮件
        mailSendApi.sendSingleMailToAdmin(new MailSendSingleToUserReqDTO()
                .setUserId(userId).setTemplateCode(templateCode).setTemplateParams(templateParams));
    }
    
}

# 5. 邮箱平台附录

  • 《QQ 邮箱的 SMTP 设置》 (opens new window)
  • 《网易 163 邮箱的 SMTP 设置》 (opens new window)
  • 《QQ 邮箱、网易邮箱、腾讯企业邮箱、网易企业邮箱的 SMTP 设置》 (opens new window)
短信配置
站内信配置

← 短信配置 站内信配置→

Theme by Vdoing | Copyright © 2019-2023 芋道源码 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×