Web项目中使用Hutool工具包中的邮件工具类发送邮件时,最新修改的邮件配置没有生效

前言:

Hutool是一个非常优秀的工具包,里面提供了许多的优秀的工具类;此次项目中使用到其邮件发送工具类了,但是在使用时也遇到了一些问题;

问题描述: 

       首先本项目是一个web项目,有一个邮件配置页面,里面配置一些邮件发送的参数,例如:发件人邮箱、密码,收件人邮箱等,然后存入数据库;
       当邮件的配置进行修改后,会触发程序去数据库中重新读取邮件配置,然后再发送邮件时使用新的邮件配置参数进行发送邮件。但是,此时就发生了问题,就是再次发送邮件时没有使用新的配置参数; 例如:一开始只有一个收件人的邮箱,但是我又在页面中新增了一个收件人邮箱,但是再次发送邮件时,新增的收件人并没有收到邮件。

【请仔细阅读此问题描述,看看是否与你遇到的问题是否一样,不一样就可以划过了】

解决问题: 

1、遇到这个问题我首先质疑的是自己的代码是否存在问题,是否自己在修改了邮件的配置参数后程序没有去重新读取配置,但是通过debug发现自己的代码没有问题。


2、然后去看了看这个工具类的源代码发现了问题所在,这个工具类中有个参数 "isUseGlobalSession" 是否使用全局session,工具类代码中的 "send()" 邮件发送方法中 "isUseGlobalSession = true" 默认为使用的,所以导致即使重新读取了修改后的邮件配置也是使用的之前的配置参数。


3、问题找到后的解决方法:新建个 "SendMailUtil" 工具类,然后继承 "MailUtil" 类,然后重写 "send()" 方法,在send方法中默认不使用其全局session;然后在发送邮件时调用此重写的send方法。

代码:

public class SendMailUtil extends MailUtil{

	/**
	 *  重写send方法让其不使用全局会话
	 *
	 *  setUseGlobalSession(false);设置是否使用全局会话为 false
	 */
	public static void send(MailAccount mailAccount, Collection<String> tos, String subject, String content, boolean isHtml, File... files) {
		Mail.create(mailAccount).setTos((String[])tos.toArray(new String[tos.size()])).setTitle(subject).setContent(content).setHtml(isHtml).setUseGlobalSession(false).setFiles(files).send();
	}

}

不要忘记留下你学习的足迹 [点赞 + 收藏 + 评论]嘿嘿ヾ 

一切看文章不点赞都是“耍流氓”,嘿嘿ヾ(◍°∇°◍)ノ゙!开个玩笑,动一动你的小手,点赞就完事了,你每个人出一份力量(点赞 + 评论)就会让更多的学习者加入进来!非常感谢! ̄ω ̄=

发布了21 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/feichitianxia/article/details/104071943