# 短信开发/站内消息/邮件
## 阿里短信配置
* 阿里云短信服务官方地址[https://dayu.aliyun.com/product/sms](https://dayu.aliyun.com/product/sms)
* 免费开通,账户充值任意金额,按量计费
* 进入管理控制台[https://dysms.console.aliyun.com/dysms.htm](https://dysms.console.aliyun.com/dysms.htm)进行签名申请和模版管理
* 进入短信服务应用左侧“国内消息-签名管理” 添加申请签名
* 进入“模版管理”添加短信模版
* 右上角个人信息进入“AccessKey 管理”可管理获取Accesskey
[https://ram.console.aliyun.com/manage/ak](https://ram.console.aliyun.com/manage/ak)
* 将以上配置填入“系统配置”菜单中即可
## 腾讯云短信配置
* 腾讯云短信服务官方地址[https://cloud.tencent.com/product/sms](https://cloud.tencent.com/product/sms)
* 需提前购买短信包[https://buy.cloud.tencent.com/sms](https://buy.cloud.tencent.com/sms)
* 进入管理控制台[https://console.cloud.tencent.com/smsv2](https://console.cloud.tencent.com/smsv2)进行签名申请和模版管理
* 进入短信服务应用左侧菜单“国内短信-签名管理” 添加申请签名
* 进入短信服务应用左侧菜单“应用管理-应用列表” 获取应用AppID
[https://console.cloud.tencent.com/smsv2/app-manage](https://console.cloud.tencent.com/smsv2/app-manage)
* 右上角个人信息进入“访问管理-API密钥管理”可管理获取AccessId与key
[https://console.cloud.tencent.com/cam/capi](https://console.cloud.tencent.com/cam/capi)
## 短信开发使用
* 详见封装的工具类你还可以在此封装更简单使用的方法
~~~
/**
* 发送短信
* @param mobile 手机号 多个,逗号分隔 若为11位国内手机号无需加国家区号86
* 国际号码需加上区号 [国家或地区码][手机号] 如8109012345678、86为日本、09012345678为手机号
* @param params 参数 JSON格式,如{"code": "1234"}
* 若启用腾讯短信会自动按顺序转换为逗号分隔的数组值如[1234]
* @param templateCode 短信模板code/id
*/
public void sendSms(String mobile, String params, String templateCode) {
}
/**
* 发送验证码 模版变量为 code 无需模版编号
* @param mobile
* @param code
* @param type 0通用模版 1注册 2登录 3修改手机 4修改密码 5重置密码
* @return
* @throws ClientException
*/
public void sendCode(String mobile, String code, Integer type) {
}
~~~
* 示例
~~~
// 注入工具类
@Autowired
private SmsUtil smsUtil;
// getTemplate方法中0代表使用通用模版 详见代码getTemplate()方法
smsUtil.sendSms("1380000000", "{code: 1234}", smsUtil.getTemplate(0));
~~~
## 短信模版扩展
* 添加模版常量`SettingConstant.java`,如
~~~
String SMS_你的模版 = "SMS_你的模版";
~~~
* 前端`/src/views/sys/setting-manage/sms.vue`中添加新的模版选项
~~~
<Option value="0">通用验证码</Option>
...
<Option value="7">你的模版名</Option>
~~~
* 在`cn.exrick.Tceon-PERFOOT .common.sms.SmsUtil`中的`getTemplate()`方法添加设置对应`value`值代表的模版常量
* 获取用户配置的模版Code
~~~
@Autowired
private SmsUtil smsUtil;
// getTemplate方法中0代表使用通用模版 详见代码getTemplate()方法
smsUtil.getTemplateCode(0);
~~~
## 短信服务商扩展
* 添加对象服务商常量`SettingConstant.java`,如
~~~
String 你的短信服务商= "你的短信服务商";
~~~
* 前端`/src/views/sys/setting-manage/sms.vue`中添加新的服务商选项
* 后端修改添加配置类所需相关接口(参考已有代码即可)`cn.exrick.Tceon-PERFOOT .modules.base.controller.manage.SettingController`
* 后端采用工厂设计模式,需实现`cn.exrick.Tceon-PERFOOT .common.sms.Sms`接口(注意你的短信服务商实现方法中需适配相应接口参数),然后修改`cn.exrick.Tceon-PERFOOT common.sms.SmsFactory`
## 站内模版消息
* 先进入消息管理添加一条模版消息并在系统代码中记录其ID,参考`cn.exrick.Tceon-PERFOOT .common.constant.ActivitiConstant`。消息变量以`${}`包裹。
![](https://img.kancloud.cn/a9/c3/a9c3a535e26b2dc3b2a97f4cc9959c18_1748x924.png)
* 发送消息使用消息发送接口类`cn.exrick.Tceon-PERFOOT .modules.base.service.MessageSendService`
~~~
/**
* 获得填充变量后的消息
* @param messageId 消息ID
* @param params 消息模版变量参数
* @return
*/
Message getTemplateMessage(String messageId, Map<String, String> params);
/**
* 发送模版消息
* @param userIds 发送用户
* @param messageId 消息ID
* @param params 消息模版变量参数
*/
void sendTemplateMessage(List<String> userIds, String messageId, Map<String, String> params);
/**
* 发送模版消息
* @param userId 发送给单个用户
* @param messageId 消息ID
* @param params 消息模版变量参数
*/
void sendTemplateMessage(String userId, String messageId, Map<String, String> params);
~~~
* 示例
~~~
// 注入
@Autowired
private MessageSendService messageSendService;
// 替换变量code为值1234
Map<String, String> params = new HashMap<>();
params.put("code", "1234");
messageSendService.sendTemplateMessage("发送的用户ID", "消息模版的ID", params);
~~~
## 邮件发送
* 在`src/main/resources/templates`目录下放置你的HTML邮件模版,模版引擎使用`Thymeleaf`,变量等使用方式参考已有代码
* 发送邮件方法
~~~
// 注入邮件工具类
@Autowired
private EmailUtil emailUtil;
/**
* 异步发送邮件
* @param sendTo 接收者邮箱
* @param title 邮件标题
* @param templateName 邮件模板
* @param variables 模板替换变量Map
*/
public void sendTemplateEmailByMap(String sendTo, String title, String templateName, Map<String, Object> variables) {
sendTemplateEmail(sendTo, title, templateName, variables, null);
}
/**
* 异步发送邮件
* @param sendTo 接收者邮箱
* @param title 邮件标题
* @param templateName 邮件模板
* @param o 模板替换对象
*/
public void sendTemplateEmail(String sendTo, String title, String templateName, Object o) {
sendTemplateEmail(sendTo, title, templateName, null, o);
}
~~~
- 前言版本&说明
- 概念
- Tceon-PERFOOT 是什么?
- 系统架构
- 主要使用的开源组件
- 角色控制访问权限(RBAC)
- 用户手册
- 系统配置
- 工作流使用配置
- 定时任务调度
- 项目本地运行
- 后端运行
- 前端运行
- 项目结构说明
- 附:使用Oracle等数据库
- 模块化版本
- 后端开发指南
- 基本开发指南
- 前后端数据交互标准
- 工具类及数据权限
- 代码生成器
- 增删改查CRUD
- 日志类型注解扩展
- 逻辑删除
- 各验证码使用及配置
- 前端开发指南
- 基本开发指南
- 主题/Logo/首页等配置
- 路由菜单配置
- 多语言国际化配置
- 自定义图标icon
- 工具类及数据获取
- 完整版开发指南
- 前端Vue代码生成器
- Activiti工作流
- 单点登录配置
- MinIO对象存储服务搭建
- 第三方社交账号配置
- 短信开发/站内消息/邮件
- Vaptcha验证码
- 禁用词使用
- Monaco代码编辑器
- 开放平台及单点登录
- 开放平台使用指南
- Web接入开发流程
- 单点登录开发指南
- 微信小程序端开发指南
- 项目导入与开发必读
- 通用方法工具类说明
- Uniapp端开发指南
- APP后端开发指南
- Uniapp前端开发指南
- 开发新功能示例
- 后端开发新模块
- 前端开发新页面
- 测试
- SonarQube代码质量管理
- TestNG单元测试
- ExtentReports测试报告
- Selenuim自动化Web测试
- Appuim自动化App测试
- JMeter压测性能测试
- 部署
- Spring Boot配置
- 快速部署
- 后端部署
- 前端部署
- 前端部署优化
- Docker容器化部署
- 服务器配置
- DevOps环境搭建
- 组件安装列表
- 开发设计规范
- 分支管理
- 数据库设计规范
- Redis使用规范
- Java基础开发规范
- Rest API规范
- 项目结构规范
- 前端开发规范
- 前端设计规范
- 项目搭建分享
- 后端相关
- SpringBoot 2.x区别总结
- Spring Security整合JWT
- Spring Security动态权限管理
- Spring Boot 2.x整合Quartz
- Spring Boot 2.x整合Websocket
- Spring Boot 2.x整合Activiti工作流以及模型设计器
- Spring Boot + Security全局跨域配置
- 前端相关
- axios请求封装 统一异常处理
- 动态路由菜单加载
- 多维度控制权限至按钮显示
- 发送消息图标红点实时显示
- 动态组件单页操作
- 常见问题