你有没有觉得邮件发送人固定配置在yml文件中是不妥当的呢?SpringBoot 动态设置邮件发送人 (2)

用到的MailDto

/** * @author crush * 邮箱发送-前端传输参数 */ @Data public class MailDTO implements Serializable { /*** 接受邮箱账户*/ private String mail; /*** 邮箱标题*/ private String title; /** * 要发送的内容*/ private String content; } 2.4、MailSenderConfig 配置类 /** * @author crush */ @Slf4j @Component @AllArgsConstructor public class MailSenderConfig { private final List<JavaMailSenderImpl> senderList; private final MailProperties mailProperties; private final MailMapper mailMapper; /** * 初始化 sender * PostConstruct注解用于需要在依赖注入完成后执行任何初始化的方法。 必须在类投入使用之前调用此方法 * 因为刚开始我觉得这种方式(@PostConstruct) 不合适,就是没能做到修改了马上就能用的那种感觉。 * 但是后来写完才发现,其实只要每次添加新的邮件发送人时,都重新初始化一次就可以了。 * 后来我又用启动事件监听器。@PostConstruct 后来就没去测试了。 * 理论添加、修改完 调用这个初始化方法就可以了。 */ // @PostConstruct public void buildMailSender() { log.info("初始化mailSender"); List<MailPO> mails = mailMapper.selectList(new QueryWrapper<MailPO>().eq("state", 1)); /** * 需求:原本就是打算做成一个动态的邮件发送人,因为如果总是用一个邮件发送验证码或者是那种打扰短信,速度一旦太过于频繁,就会造成邮件发送错误。 * 思路:从数据库中拿到所有可用的邮件发送人,然后封装起来,之后发送邮件时,再进行随机的选择即可。 * 另外一种方式就是这是动态的。 * 最后就是加个兜底的,如果数据库中查询不到邮件发送人,我们使用配置文件中的发送邮件的配置。 */ if(mails!=null&&!mails.isEmpty()){ mails.forEach(mail -> { JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); javaMailSender.setDefaultEncoding(mail.getDefaultEncoding()); javaMailSender.setHost(mail.getEmailHost()); javaMailSender.setPort(mail.getEmailPort()); javaMailSender.setProtocol(mail.getProtocol()); javaMailSender.setUsername(mail.getEmailUsername()); javaMailSender.setPassword(mail.getEmailPassword()); // 添加数据 senderList.add(javaMailSender); }); } else{ JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); javaMailSender.setDefaultEncoding(mailProperties.getDefaultEncoding()); javaMailSender.setHost(mailProperties.getHost()); javaMailSender.setPort(mailProperties.getPort()); javaMailSender.setProtocol(mailProperties.getProtocol()); javaMailSender.setUsername(mailProperties.getUsername()); javaMailSender.setPassword(mailProperties.getPassword()); // 添加数据 senderList.add(javaMailSender); } } /** * 获取MailSender * * @return CustomMailSender */ public JavaMailSenderImpl getSender() { if (senderList.isEmpty()) { buildMailSender(); } // 随机返回一个JavaMailSender return senderList.get(new Random().nextInt(senderList.size())); } /** * 清理 sender */ public void clear() { senderList.clear(); } } 2.5、监听器

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxpfz.html