近日在做邮件发送功能时 莫名其妙的出现了NullPointerException空指针异常 代码在测试的时候完全正常 但封装成工具类再调用的时候就报错 在解决的过程中也查找过很多相关资料 但帮助不是很大 有个方法是添加@PostConstruct注解然后初始化 但是并没有作用 将 改为 但我在邮件里需要发送Thymeleaf页面 因此需要注入TemplateEngine 在解析模板页面的时候直接发送了字符串 邮件里直接发送了”mailTemplate”字符串 根本不是我要发送的页面内容 这谁顶得住呀😣 这个问题研究一整天了 然而 在我的努力下 终于在无意间成功解决了😁 一、我在邮件发送工具类里给注入的JavaMailSenderImpl加上了static 这个static必须去掉 二、要给工具类加上
一、问题描述
还有个方法是新建一个普通类 确实能解决部分问题(如果你不是用Thymeleaf模板发送的话)@Autowired private static JavaMailSenderImpl javaMailSender;
public static JavaMailSenderImpl JavaMailSender() { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setHost("邮件服务器"); mailSender.setUsername("发件人邮箱"); mailSender.setPassword("SMTP密码"); return mailSender; }
随后 在用该方法注入TemplateEngine的时候:public static TemplateEngine TemplateEngine() { TemplateEngine templateEngine=new TemplateEngine(); return templateEngine; }
比如:templateEngine.process("mailTemplate",context);
因此 该方法也被否决了二、解决方法
因为静态方法是属于类的 普通方法才是属于实体对象(即New出来的对象)的
spring注入是在容器中实例化对象 所以不能使用静态方法@Component
注解
用@autowired注入JavaMailSenderImpl后 将整个类交给了Spring管理
因此类上必须加@Component
在调用该工具类的时候也要用@Autowired
注入因此 最终的工具类代码是这样的:
@Component // 要加@Component注解 public class MailUtil { @Autowired private JavaMailSenderImpl javaMailSender; @Autowired private TemplateEngine templateEngine; public void sendTemplateMail() throws MessagingException, UnsupportedEncodingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true); mimeMessageHelper.setFrom(new InternetAddress("发件人邮箱","发件人昵称","UTF-8")); // 收件人邮箱 mimeMessageHelper.setTo("收件人邮箱"); mimeMessageHelper.setSubject("邮件标题"); Context context=new Context(); // 收件人昵称 context.setVariable("nickname","陈涛"); String content=templateEngine.process("mailTemplate",context); // true表明为HTML格式邮件 mimeMessageHelper.setText(content, true); javaMailSender.send(mimeMessage); } }
mailTemplate.html 模板页面:
<!DOCTYPE html> <html lang="en" xmlns:th="https://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div th:text="${nickname}+',您好'"></div> </body> </html>
测试:
@SpringBootTest @RunWith(SpringRunner.class) public class VueBlogApplicationTests { @Autowired // 要先注入 private MailUtil mailUtil; @Test public void test() throws UnsupportedEncodingException, MessagingException { mailUtil.sendTemplateMail(); } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算