sms、邮件数据库配置

This commit is contained in:
2025-11-26 13:38:36 +08:00
parent 8d8ecf8763
commit 4ff1bc1101
16 changed files with 847 additions and 186 deletions

View File

@@ -19,6 +19,13 @@
</properties>
<dependencies>
<!-- Common Core -->
<dependency>
<groupId>org.xyzh</groupId>
<artifactId>common-core</artifactId>
<version>1.0.0</version>
</dependency>
<!-- Apache POI for Excel -->
<dependency>
<groupId>org.apache.poi</groupId>

View File

@@ -3,11 +3,11 @@ package org.xyzh.common.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.xyzh.common.config.properties.EmailConfigProperties;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
@@ -27,8 +27,8 @@ public class EmailUtils {
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username:}")
private String from;
@Autowired
private EmailConfigProperties emailConfigProperties;
/**
* 发送简单文本邮件
@@ -40,6 +40,7 @@ public class EmailUtils {
public boolean sendSimpleEmail(String to, String subject, String content) {
try {
SimpleMailMessage message = new SimpleMailMessage();
String from = emailConfigProperties.getUsername();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
@@ -66,6 +67,7 @@ public class EmailUtils {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
String from = emailConfigProperties.getUsername();
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);

View File

@@ -6,9 +6,10 @@ import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.xyzh.common.config.properties.SmsConfigProperties;
/**
* @description 短信发送工具类 - 支持多种短信服务商
@@ -22,29 +23,8 @@ public class SmsUtils {
private static final Logger logger = LoggerFactory.getLogger(SmsUtils.class);
@Value("${sms.enabled:false}")
private boolean enabled;
@Value("${sms.provider:aliyun}")
private String provider;
@Value("${sms.access-key-id:}")
private String accessKeyId;
@Value("${sms.access-key-secret:}")
private String accessKeySecret;
@Value("${sms.sign-name:红色思政学习平台}")
private String signName;
@Value("${sms.template-code:}")
private String templateCode;
@Value("${sms.region-id:cn-hangzhou}")
private String regionId;
@Value("${sms.endpoint:dysmsapi.aliyuncs.com}")
private String endpoint;
@Autowired
private SmsConfigProperties smsConfigProperties;
/**
* 发送短信验证码
@@ -54,16 +34,22 @@ public class SmsUtils {
*/
public boolean sendVerificationCode(String phone, String code) {
// 如果未启用短信服务,使用模拟模式
if (!enabled || !StringUtils.hasText(accessKeyId) || !StringUtils.hasText(accessKeySecret)) {
String accessKeyId = smsConfigProperties.getAccessKeyId();
String accessKeySecret = smsConfigProperties.getAccessKeySecret();
if (!StringUtils.hasText(accessKeyId) || !StringUtils.hasText(accessKeySecret)) {
logger.warn("短信服务未配置或未启用,使用模拟模式");
logger.info("【模拟发送】短信验证码,手机号: {}, 验证码: {}", phone, code);
return true;
}
// 根据配置的服务商选择发送方式
String provider = smsConfigProperties.getProvider();
if (provider == null) provider = "aliyun";
switch (provider.toLowerCase()) {
case "aliyun":
return sendByAliyun(phone, code);
return sendByAliyun(phone, code, smsConfigProperties.getTemplateCodeLogin());
case "tencent":
logger.warn("腾讯云短信服务暂未实现,使用模拟模式");
logger.info("【模拟发送】短信验证码,手机号: {}, 验证码: {}", phone, code);
@@ -78,15 +64,16 @@ public class SmsUtils {
* 使用阿里云发送短信验证码
* @param phone 手机号
* @param code 验证码
* @param templateCode 短信模板CODE
* @return 是否发送成功
*/
private boolean sendByAliyun(String phone, String code) {
private boolean sendByAliyun(String phone, String code, String templateCode) {
try {
Client client = createAliyunClient();
SendSmsRequest request = new SendSmsRequest()
.setPhoneNumbers(phone)
.setSignName(signName)
.setSignName(smsConfigProperties.getSignName())
.setTemplateCode(templateCode)
.setTemplateParam("{\"code\":\"" + code + "\"}");
@@ -112,9 +99,9 @@ public class SmsUtils {
*/
private Client createAliyunClient() throws Exception {
Config config = new Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret)
.setEndpoint(endpoint);
.setAccessKeyId(smsConfigProperties.getAccessKeyId())
.setAccessKeySecret(smsConfigProperties.getAccessKeySecret())
.setEndpoint("dysmsapi.aliyuncs.com");
return new Client(config);
}
@@ -127,13 +114,19 @@ public class SmsUtils {
*/
public boolean sendSms(String phone, String templateCode, String templateParam) {
// 如果未启用短信服务,使用模拟模式
if (!enabled || !StringUtils.hasText(accessKeyId) || !StringUtils.hasText(accessKeySecret)) {
String accessKeyId = smsConfigProperties.getAccessKeyId();
String accessKeySecret = smsConfigProperties.getAccessKeySecret();
if (!StringUtils.hasText(accessKeyId) || !StringUtils.hasText(accessKeySecret)) {
logger.warn("短信服务未配置或未启用,使用模拟模式");
logger.info("【模拟发送】短信,手机号: {}, 模板: {}, 参数: {}", phone, templateCode, templateParam);
return true;
}
// 根据配置的服务商选择发送方式
String provider = smsConfigProperties.getProvider();
if (provider == null) provider = "aliyun";
switch (provider.toLowerCase()) {
case "aliyun":
return sendSmsAliyun(phone, templateCode, templateParam);
@@ -156,7 +149,7 @@ public class SmsUtils {
SendSmsRequest request = new SendSmsRequest()
.setPhoneNumbers(phone)
.setSignName(signName)
.setSignName(smsConfigProperties.getSignName())
.setTemplateCode(templateCode)
.setTemplateParam(templateParam);
@@ -185,13 +178,19 @@ public class SmsUtils {
*/
public boolean sendBatchSms(String phones, String templateCode, String templateParam) {
// 如果未启用短信服务,使用模拟模式
if (!enabled || !StringUtils.hasText(accessKeyId) || !StringUtils.hasText(accessKeySecret)) {
String accessKeyId = smsConfigProperties.getAccessKeyId();
String accessKeySecret = smsConfigProperties.getAccessKeySecret();
if (!StringUtils.hasText(accessKeyId) || !StringUtils.hasText(accessKeySecret)) {
logger.warn("短信服务未配置或未启用,使用模拟模式");
logger.info("【模拟发送】批量短信,手机号: {}, 模板: {}, 参数: {}", phones, templateCode, templateParam);
return true;
}
// 根据配置的服务商选择发送方式
String provider = smsConfigProperties.getProvider();
if (provider == null) provider = "aliyun";
switch (provider.toLowerCase()) {
case "aliyun":
return sendBatchSmsAliyun(phones, templateCode, templateParam);
@@ -214,7 +213,7 @@ public class SmsUtils {
SendSmsRequest request = new SendSmsRequest()
.setPhoneNumbers(phones)
.setSignName(signName)
.setSignName(smsConfigProperties.getSignName())
.setTemplateCode(templateCode)
.setTemplateParam(templateParam);