mirror of
https://gitee.com/y_project/RuoYi-Cloud.git
synced 2026-01-26 19:51:56 +08:00
完成基础邮件发送功能
This commit is contained in:
@@ -64,6 +64,16 @@
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Java邮件实现者 -->
|
||||
<dependency>
|
||||
<groupId>org.eclipse.angus</groupId>
|
||||
<artifactId>jakarta.mail</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.angus</groupId>
|
||||
<artifactId>angus-activation</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- RuoYi Common DataSource -->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.ruoyi.system.config;
|
||||
|
||||
import com.ruoyi.common.core.mail.MailSendAccount;
|
||||
import com.ruoyi.common.core.mail.MailSender;
|
||||
import com.ruoyi.common.core.utils.StringUtils;
|
||||
import com.ruoyi.common.security.utils.SysConfigUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* 邮件配置
|
||||
*
|
||||
* @author Alan Scipio
|
||||
* created on 2024/2/29
|
||||
*/
|
||||
@Slf4j
|
||||
@Configuration
|
||||
public class MailConfig {
|
||||
|
||||
@Value("${spring.mail.host:#{null}}")
|
||||
private String host;
|
||||
@Value("${spring.mail.port:#{null}}")
|
||||
private Integer port;
|
||||
@Value("${spring.mail.username:#{null}}")
|
||||
private String username;
|
||||
@Value("${spring.mail.password:#{null}}")
|
||||
private String password;
|
||||
|
||||
@Bean
|
||||
public MailSender mailSender() {
|
||||
MailSendAccount account = new MailSendAccount();
|
||||
|
||||
// 加载配置文件中的邮件配置
|
||||
account.setHost(host);
|
||||
account.setPort(port);
|
||||
account.setUsername(username);
|
||||
account.setPassword(password);
|
||||
|
||||
// 加载数据库中的邮件配置(会缓存到redis中,并覆盖前面的配置)
|
||||
String hostCache = SysConfigUtils.getConfigCache("sys.mail.smtpHost");
|
||||
String portCache = SysConfigUtils.getConfigCache("sys.mail.smtpPort");
|
||||
String usernameCache = SysConfigUtils.getConfigCache("sys.mail.username");
|
||||
String passwordCache = SysConfigUtils.getConfigCache("sys.mail.password");
|
||||
if (StringUtils.isNotBlank(hostCache) && StringUtils.isNotBlank(portCache)) {
|
||||
account.setHost(hostCache);
|
||||
account.setPort(Integer.parseInt(portCache));
|
||||
if (StringUtils.isNotBlank(usernameCache)) {
|
||||
account.setUsername(usernameCache);
|
||||
}
|
||||
if (StringUtils.isNotBlank(passwordCache)) {
|
||||
account.setPassword(passwordCache);
|
||||
}
|
||||
} else {
|
||||
log.warn("Mail configuration from database table 'sys_config' is empty. Use the configuration from application.yaml instead.");
|
||||
}
|
||||
|
||||
account.setSslFlag(account.getPassword() != null && !account.getPassword().isEmpty());
|
||||
log.info("Mail configuration has been initialized. smtpHost: [{}], smtpPort: [{}], username: [{}]", account.getHost(), account.getPort(), account.getUsername());
|
||||
return MailSender.build(account, true);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.ruoyi.system.mapper;
|
||||
|
||||
import com.ruoyi.system.domain.SysConfig;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -34,6 +35,14 @@ public interface SysConfigMapper {
|
||||
*/
|
||||
List<SysConfig> selectConfigList(SysConfig config);
|
||||
|
||||
/**
|
||||
* 查询参数配置列表
|
||||
*
|
||||
* @param configKeyList 参数键名集合
|
||||
* @return 参数配置集合
|
||||
*/
|
||||
List<SysConfig> selectConfigListByKeys(@Param("configKeyList") List<String> configKeyList);
|
||||
|
||||
/**
|
||||
* 根据键名查询参数配置信息
|
||||
*
|
||||
|
||||
@@ -34,6 +34,14 @@ public interface ISysConfigService {
|
||||
*/
|
||||
List<SysConfig> selectConfigList(SysConfig config);
|
||||
|
||||
/**
|
||||
* 根据键名查询参数配置信息
|
||||
*
|
||||
* @param configKeyList 参数键名集合
|
||||
* @return 参数配置集合
|
||||
*/
|
||||
List<SysConfig> selectConfigListByKeys(List<String> configKeyList);
|
||||
|
||||
/**
|
||||
* 新增参数配置
|
||||
*
|
||||
|
||||
@@ -83,6 +83,11 @@ public class SysConfigServiceImpl implements ISysConfigService {
|
||||
return configMapper.selectConfigList(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysConfig> selectConfigListByKeys(List<String> configKeyList) {
|
||||
return configMapper.selectConfigListByKeys(configKeyList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增参数配置
|
||||
*
|
||||
|
||||
@@ -1,110 +1,101 @@
|
||||
package com.ruoyi.system.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.common.security.utils.DictUtils;
|
||||
import com.ruoyi.system.api.domain.SysDictData;
|
||||
import com.ruoyi.system.mapper.SysDictDataMapper;
|
||||
import com.ruoyi.system.service.ISysDictDataService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 字典 业务层处理
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Service
|
||||
public class SysDictDataServiceImpl implements ISysDictDataService
|
||||
{
|
||||
@Autowired
|
||||
public class SysDictDataServiceImpl implements ISysDictDataService {
|
||||
@Resource
|
||||
private SysDictDataMapper dictDataMapper;
|
||||
|
||||
/**
|
||||
* 根据条件分页查询字典数据
|
||||
*
|
||||
*
|
||||
* @param dictData 字典数据信息
|
||||
* @return 字典数据集合信息
|
||||
*/
|
||||
@Override
|
||||
public List<SysDictData> selectDictDataList(SysDictData dictData)
|
||||
{
|
||||
public List<SysDictData> selectDictDataList(SysDictData dictData) {
|
||||
return dictDataMapper.selectDictDataList(dictData);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据字典类型和字典键值查询字典数据信息
|
||||
*
|
||||
* @param dictType 字典类型
|
||||
*
|
||||
* @param dictType 字典类型
|
||||
* @param dictValue 字典键值
|
||||
* @return 字典标签
|
||||
*/
|
||||
@Override
|
||||
public String selectDictLabel(String dictType, String dictValue)
|
||||
{
|
||||
public String selectDictLabel(String dictType, String dictValue) {
|
||||
return dictDataMapper.selectDictLabel(dictType, dictValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据字典数据ID查询信息
|
||||
*
|
||||
*
|
||||
* @param dictCode 字典数据ID
|
||||
* @return 字典数据
|
||||
*/
|
||||
@Override
|
||||
public SysDictData selectDictDataById(Long dictCode)
|
||||
{
|
||||
public SysDictData selectDictDataById(Long dictCode) {
|
||||
return dictDataMapper.selectDictDataById(dictCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除字典数据信息
|
||||
*
|
||||
*
|
||||
* @param dictCodes 需要删除的字典数据ID
|
||||
*/
|
||||
@Override
|
||||
public void deleteDictDataByIds(Long[] dictCodes)
|
||||
{
|
||||
for (Long dictCode : dictCodes)
|
||||
{
|
||||
public void deleteDictDataByIds(Long[] dictCodes) {
|
||||
for (Long dictCode : dictCodes) {
|
||||
SysDictData data = selectDictDataById(dictCode);
|
||||
dictDataMapper.deleteDictDataById(dictCode);
|
||||
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
|
||||
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
||||
List<SysDictData> dictData = dictDataMapper.selectDictDataByType(data.getDictType());
|
||||
DictUtils.setDictCache(data.getDictType(), dictData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增保存字典数据信息
|
||||
*
|
||||
*
|
||||
* @param data 字典数据信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertDictData(SysDictData data)
|
||||
{
|
||||
public int insertDictData(SysDictData data) {
|
||||
int row = dictDataMapper.insertDictData(data);
|
||||
if (row > 0)
|
||||
{
|
||||
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
|
||||
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
||||
if (row > 0) {
|
||||
List<SysDictData> dictData = dictDataMapper.selectDictDataByType(data.getDictType());
|
||||
DictUtils.setDictCache(data.getDictType(), dictData);
|
||||
}
|
||||
return row;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改保存字典数据信息
|
||||
*
|
||||
*
|
||||
* @param data 字典数据信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateDictData(SysDictData data)
|
||||
{
|
||||
public int updateDictData(SysDictData data) {
|
||||
int row = dictDataMapper.updateDictData(data);
|
||||
if (row > 0)
|
||||
{
|
||||
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
|
||||
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
||||
if (row > 0) {
|
||||
List<SysDictData> dictData = dictDataMapper.selectDictDataByType(data.getDictType());
|
||||
DictUtils.setDictCache(data.getDictType(), dictData);
|
||||
}
|
||||
return row;
|
||||
}
|
||||
|
||||
@@ -78,6 +78,18 @@
|
||||
where config_key = #{configKey} limit 1
|
||||
</select>
|
||||
|
||||
<select id="selectConfigListByKeys" resultType="com.ruoyi.system.domain.SysConfig">
|
||||
<include refid="selectConfigVo"/>
|
||||
<where>
|
||||
<if test="configKeyList != null and configKeyList.size > 0">
|
||||
and config_key in
|
||||
<foreach collection="configKeyList" item="configKey" open="(" separator="," close=")">
|
||||
#{configKey}
|
||||
</foreach>
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<insert id="insertConfig" parameterType="com.ruoyi.system.domain.SysConfig">
|
||||
insert into sys_config (
|
||||
<if test="configName != null and configName != '' ">config_name,</if>
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<update id="updateDictType" parameterType="com.ruoyi.system.api.domain.SysDictTypeSysDictType">
|
||||
<update id="updateDictType" parameterType="com.ruoyi.system.api.domain.SysDictType">
|
||||
update sys_dict_type
|
||||
<set>
|
||||
<if test="dictName != null and dictName != ''">dict_name = #{dictName},</if>
|
||||
@@ -87,7 +87,7 @@
|
||||
where dict_id = #{dictId}
|
||||
</update>
|
||||
|
||||
<insert id="insertDictType" parameterType="com.ruoyi.system.api.domain.SysDictTypeSysDictType">
|
||||
<insert id="insertDictType" parameterType="com.ruoyi.system.api.domain.SysDictType">
|
||||
insert into sys_dict_type(
|
||||
<if test="dictName != null and dictName != ''">dict_name,</if>
|
||||
<if test="dictType != null and dictType != ''">dict_type,</if>
|
||||
|
||||
Reference in New Issue
Block a user