guoshilong
2024-01-18 358ed232257e1fbf67e2ea9a12ab0efc9f83d6c2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package org.springblade.modules.email.config;
 
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.support.Condition;
import org.springblade.modules.email.entity.EmailEntity;
import org.springblade.modules.email.mapper.EmailMapper;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Component;
 
import java.util.List;
 
@Slf4j
@Component
@AllArgsConstructor
public class MailSenderConfig {
 
    private final MailProperties mailProperties;
 
    private final EmailMapper emailMapper;
 
    /**
     * 初始化 sender
     * PostConstruct注解用于需要在依赖注入完成后执行任何初始化的方法。 必须在类投入使用之前调用此方法
     * 因为刚开始我觉得这种方式(@PostConstruct) 不合适,就是没能做到修改了马上就能用的那种感觉。
     * 但是后来写完才发现,其实只要每次添加新的邮件发送人时,都重新初始化一次就可以了。
     * 后来我又用启动事件监听器。@PostConstruct 后来就没去测试了。
     * 理论添加、修改完 调用这个初始化方法就可以了。
     */
//    @PostConstruct
    public JavaMailSenderImpl buildMailSender() {
        log.info("初始化mailSender");
 
        //获取数据库中启用的邮件配置
        EmailEntity params = new EmailEntity();
        params.setStatus(2);
 
        EmailEntity email = emailMapper.selectOne(Condition.getQueryWrapper(params));
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
 
        //如果数据库中没有配置邮件,则使用默认的邮件配置
        if(email != null){
            javaMailSender.setDefaultEncoding(email.getDefaultEncoding());
            javaMailSender.setHost(email.getHost());
            javaMailSender.setPort(email.getPort());
            javaMailSender.setProtocol(email.getProtocol());
            javaMailSender.setUsername(email.getUsername());
            javaMailSender.setPassword(email.getPassword());
        }
        else{
            javaMailSender.setDefaultEncoding(mailProperties.getDefaultEncoding());
            javaMailSender.setHost(mailProperties.getHost());
            javaMailSender.setPort(mailProperties.getPort());
            javaMailSender.setProtocol(mailProperties.getProtocol());
            javaMailSender.setUsername(mailProperties.getUsername());
            javaMailSender.setPassword(mailProperties.getPassword());
        }
        return javaMailSender;
 
 
    }
 
    /**
     * 获取MailSender
     *
     * @return CustomMailSender
     */
    public JavaMailSenderImpl getSender() {
        return buildMailSender();
    }
}