refactor(messaging/mail): 提供 JavaMailSenderImpl 默认配置,并重构 MailConfigurer 配置代码

This commit is contained in:
2025-10-03 21:39:27 +08:00
parent d1db737f7a
commit 75aeb26a4f
3 changed files with 50 additions and 22 deletions

View File

@@ -16,12 +16,18 @@
package top.continew.starter.messaging.mail.autoconfigure; package top.continew.starter.messaging.mail.autoconfigure;
import cn.hutool.core.map.MapUtil;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import top.continew.starter.core.util.GeneralPropertySourceFactory; import top.continew.starter.core.util.GeneralPropertySourceFactory;
import top.continew.starter.core.util.MapUtils;
/** /**
* 邮件自动配置 * 邮件自动配置
@@ -30,11 +36,43 @@ import top.continew.starter.core.util.GeneralPropertySourceFactory;
* @since 1.0.0 * @since 1.0.0
*/ */
@AutoConfiguration @AutoConfiguration
@EnableConfigurationProperties(MailProperties.class)
@PropertySource(value = "classpath:default-messaging-mail.yml", factory = GeneralPropertySourceFactory.class) @PropertySource(value = "classpath:default-messaging-mail.yml", factory = GeneralPropertySourceFactory.class)
public class MailAutoConfiguration { public class MailAutoConfiguration {
private static final Logger log = LoggerFactory.getLogger(MailAutoConfiguration.class); private static final Logger log = LoggerFactory.getLogger(MailAutoConfiguration.class);
@Bean
JavaMailSenderImpl mailSender(MailProperties properties) {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
this.applyProperties(properties, sender);
return sender;
}
/**
* 应用邮件配置
*
* @param properties 邮件配置
* @param sender 邮件 Sender
*/
private void applyProperties(MailProperties properties, JavaMailSenderImpl sender) {
sender.setHost(properties.getHost());
if (properties.getPort() != null) {
sender.setPort(properties.getPort());
}
sender.setUsername(properties.getUsername());
sender.setPassword(properties.getPassword());
sender.setProtocol(properties.getProtocol());
if (properties.getDefaultEncoding() != null) {
sender.setDefaultEncoding(properties.getDefaultEncoding().name());
}
if (MapUtil.isNotEmpty(properties.getProperties())) {
sender.setJavaMailProperties(MapUtils.toProperties(properties.getProperties()));
}
}
@PostConstruct @PostConstruct
public void postConstruct() { public void postConstruct() {
log.debug("[ContiNew Starter] - Auto Configuration 'Mail' completed initialization."); log.debug("[ContiNew Starter] - Auto Configuration 'Mail' completed initialization.");

View File

@@ -17,12 +17,10 @@
package top.continew.starter.messaging.mail.core; package top.continew.starter.messaging.mail.core;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import top.continew.starter.core.util.validation.ValidationUtils;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Map; import java.util.Map;
import java.util.Properties;
/** /**
* 邮件配置 * 邮件配置
@@ -162,25 +160,6 @@ public class MailConfig {
return properties; return properties;
} }
/**
* 将当前配置转换为 JavaMail 的 Properties 对象
*
* @return Properties 对象
*/
public Properties toJavaMailProperties() {
Properties javaMailProperties = new Properties();
javaMailProperties.putAll(this.getProperties());
javaMailProperties.put("mail.from", this.getFrom());
javaMailProperties.put("mail.smtp.auth", true);
javaMailProperties.put("mail.smtp.ssl.enable", this.isSslEnabled());
if (this.isSslEnabled()) {
ValidationUtils.throwIfNull(this.getSslPort(), "邮件配置不正确SSL端口不能为空");
javaMailProperties.put("mail.smtp.socketFactory.port", this.sslPort);
javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
}
return javaMailProperties;
}
static { static {
DEFAULT_CHARSET = StandardCharsets.UTF_8; DEFAULT_CHARSET = StandardCharsets.UTF_8;
} }

View File

@@ -19,6 +19,8 @@ package top.continew.starter.messaging.mail.core;
import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.JavaMailSenderImpl;
import top.continew.starter.core.util.validation.ValidationUtils; import top.continew.starter.core.util.validation.ValidationUtils;
import java.util.Properties;
/** /**
* 邮件配置 * 邮件配置
* *
@@ -62,8 +64,17 @@ public interface MailConfigurer {
sender.setDefaultEncoding(mailConfig.getDefaultEncoding().name()); sender.setDefaultEncoding(mailConfig.getDefaultEncoding().name());
} }
Properties javaMailProperties = new Properties();
if (!mailConfig.getProperties().isEmpty()) { if (!mailConfig.getProperties().isEmpty()) {
sender.setJavaMailProperties(mailConfig.toJavaMailProperties()); javaMailProperties.putAll(mailConfig.getProperties());
} javaMailProperties.put("mail.from", mailConfig.getFrom());
}
javaMailProperties.put("mail.smtp.auth", true);
if (mailConfig.isSslEnabled()) {
ValidationUtils.throwIfNull(mailConfig.getSslPort(), "邮件配置不正确SSL端口不能为空");
javaMailProperties.put("mail.smtp.socketFactory.port", mailConfig.getSslPort());
javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
}
sender.setJavaMailProperties(javaMailProperties);
} }
} }