Skip to content

Commit 75aeb26

Browse files
committed
refactor(messaging/mail): 提供 JavaMailSenderImpl 默认配置,并重构 MailConfigurer 配置代码
1 parent d1db737 commit 75aeb26

File tree

3 files changed

+50
-22
lines changed

3 files changed

+50
-22
lines changed

continew-starter-messaging/continew-starter-messaging-mail/src/main/java/top/continew/starter/messaging/mail/autoconfigure/MailAutoConfiguration.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,18 @@
1616

1717
package top.continew.starter.messaging.mail.autoconfigure;
1818

19+
import cn.hutool.core.map.MapUtil;
1920
import jakarta.annotation.PostConstruct;
2021
import org.slf4j.Logger;
2122
import org.slf4j.LoggerFactory;
2223
import org.springframework.boot.autoconfigure.AutoConfiguration;
24+
import org.springframework.boot.autoconfigure.mail.MailProperties;
25+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
26+
import org.springframework.context.annotation.Bean;
2327
import org.springframework.context.annotation.PropertySource;
28+
import org.springframework.mail.javamail.JavaMailSenderImpl;
2429
import top.continew.starter.core.util.GeneralPropertySourceFactory;
30+
import top.continew.starter.core.util.MapUtils;
2531

2632
/**
2733
* 邮件自动配置
@@ -30,11 +36,43 @@
3036
* @since 1.0.0
3137
*/
3238
@AutoConfiguration
39+
@EnableConfigurationProperties(MailProperties.class)
3340
@PropertySource(value = "classpath:default-messaging-mail.yml", factory = GeneralPropertySourceFactory.class)
3441
public class MailAutoConfiguration {
3542

3643
private static final Logger log = LoggerFactory.getLogger(MailAutoConfiguration.class);
3744

45+
@Bean
46+
JavaMailSenderImpl mailSender(MailProperties properties) {
47+
JavaMailSenderImpl sender = new JavaMailSenderImpl();
48+
this.applyProperties(properties, sender);
49+
return sender;
50+
}
51+
52+
/**
53+
* 应用邮件配置
54+
*
55+
* @param properties 邮件配置
56+
* @param sender 邮件 Sender
57+
*/
58+
private void applyProperties(MailProperties properties, JavaMailSenderImpl sender) {
59+
sender.setHost(properties.getHost());
60+
if (properties.getPort() != null) {
61+
sender.setPort(properties.getPort());
62+
}
63+
64+
sender.setUsername(properties.getUsername());
65+
sender.setPassword(properties.getPassword());
66+
sender.setProtocol(properties.getProtocol());
67+
if (properties.getDefaultEncoding() != null) {
68+
sender.setDefaultEncoding(properties.getDefaultEncoding().name());
69+
}
70+
71+
if (MapUtil.isNotEmpty(properties.getProperties())) {
72+
sender.setJavaMailProperties(MapUtils.toProperties(properties.getProperties()));
73+
}
74+
}
75+
3876
@PostConstruct
3977
public void postConstruct() {
4078
log.debug("[ContiNew Starter] - Auto Configuration 'Mail' completed initialization.");

continew-starter-messaging/continew-starter-messaging-mail/src/main/java/top/continew/starter/messaging/mail/core/MailConfig.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,10 @@
1717
package top.continew.starter.messaging.mail.core;
1818

1919
import cn.hutool.core.map.MapUtil;
20-
import top.continew.starter.core.util.validation.ValidationUtils;
2120

2221
import java.nio.charset.Charset;
2322
import java.nio.charset.StandardCharsets;
2423
import java.util.Map;
25-
import java.util.Properties;
2624

2725
/**
2826
* 邮件配置
@@ -162,25 +160,6 @@ public Map<String, String> getProperties() {
162160
return properties;
163161
}
164162

165-
/**
166-
* 将当前配置转换为 JavaMail 的 Properties 对象
167-
*
168-
* @return Properties 对象
169-
*/
170-
public Properties toJavaMailProperties() {
171-
Properties javaMailProperties = new Properties();
172-
javaMailProperties.putAll(this.getProperties());
173-
javaMailProperties.put("mail.from", this.getFrom());
174-
javaMailProperties.put("mail.smtp.auth", true);
175-
javaMailProperties.put("mail.smtp.ssl.enable", this.isSslEnabled());
176-
if (this.isSslEnabled()) {
177-
ValidationUtils.throwIfNull(this.getSslPort(), "邮件配置不正确:SSL端口不能为空");
178-
javaMailProperties.put("mail.smtp.socketFactory.port", this.sslPort);
179-
javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
180-
}
181-
return javaMailProperties;
182-
}
183-
184163
static {
185164
DEFAULT_CHARSET = StandardCharsets.UTF_8;
186165
}

continew-starter-messaging/continew-starter-messaging-mail/src/main/java/top/continew/starter/messaging/mail/core/MailConfigurer.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.springframework.mail.javamail.JavaMailSenderImpl;
2020
import top.continew.starter.core.util.validation.ValidationUtils;
2121

22+
import java.util.Properties;
23+
2224
/**
2325
* 邮件配置
2426
*
@@ -62,8 +64,17 @@ default void apply(MailConfig mailConfig, JavaMailSenderImpl sender) {
6264
sender.setDefaultEncoding(mailConfig.getDefaultEncoding().name());
6365
}
6466

67+
Properties javaMailProperties = new Properties();
6568
if (!mailConfig.getProperties().isEmpty()) {
66-
sender.setJavaMailProperties(mailConfig.toJavaMailProperties());
69+
javaMailProperties.putAll(mailConfig.getProperties());
70+
javaMailProperties.put("mail.from", mailConfig.getFrom());
71+
}
72+
javaMailProperties.put("mail.smtp.auth", true);
73+
if (mailConfig.isSslEnabled()) {
74+
ValidationUtils.throwIfNull(mailConfig.getSslPort(), "邮件配置不正确:SSL端口不能为空");
75+
javaMailProperties.put("mail.smtp.socketFactory.port", mailConfig.getSslPort());
76+
javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
6777
}
78+
sender.setJavaMailProperties(javaMailProperties);
6879
}
6980
}

0 commit comments

Comments
 (0)