完美解决springBoot使用邮件发送进行封装时,报空指针异常!

项目场景:

在Spring Boot中使用JavaMailSender发送邮件,出现 java.lang.NullPointerException

<!--  邮箱依赖   -->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-mail</artifactId>
 </dependency>

报错信息如下图所示:

问题描述

JavaMailSender 放在 SpringBootTests测试类里是可以运行,但是写在别的类里封装起来就会报空指针异常

	@Autowired
    private JavaMailSender mailSender;

解决方案:

创建一个工具类SendEmailUtils,用于封装和配置邮箱。
注意:此类中不需要加任何注解,不需要继承类或实现接口,不需要在application.properties或yml文件进行配置。
工具类SendEmailUtils代码如下:

public class SendEmailUtils{
	public JavaMailSenderImpl JavaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.qq.com");
        mailSender.setUsername("你的QQ@qq.com");
        mailSender.setPassword("你的授权码");
        return mailSender;
    }
    //一个简单的邮件,只有text信息
    /**
     * @Description:
     * @Param: [subject:标题, text:内容, email:接收人的邮件地址]
     * @return: void
     * @Author: 你自己
     * @Date: 2020/2/27
     */
    public void SendSimpleEmail(String subject, String text, String email) {
        JavaMailSenderImpl javaMailSender = JavaMailSender();
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setSubject(subject); //邮件的主题
        mailMessage.setText(text);
        mailMessage.setTo(email); //发送给谁
        mailMessage.setFrom(Objects.requireNonNull(javaMailSender.getUsername())); //谁发送的
        javaMailSender.send(mailMessage);
    }
 
    /**
     * @Description:
     * @Param: [subject:标题, text:内容, html,Boolean html:是否进行html解析
     * email:接收人的邮件地址, attachmentMap:附件的名称和文件路径]
     * @return: void
     * @Author: 你自己
     * @Date: 2020/2/27
     */
    public void SendMimeEmail(String subject, String text, Boolean html,
                              String email, Map<String, String> attachmentMap) throws MessagingException {
        JavaMailSenderImpl javaMailSender = JavaMailSender();
        //一个复杂的邮件`
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //进行组装
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, html);
        helper.setSubject(subject);
        helper.setText(text, html);
 
        //附件
        if (attachmentMap != null) {
            Iterator<Map.Entry<String, String>> iterator = attachmentMap.entrySet().iterator();  
            //map.entrySet()得到的是set集合,可以使用迭代器遍历
            while (iterator.hasNext()) {
                Map.Entry<String, String> entry = iterator.next();
                helper.addAttachment(entry.getKey(), 
                //附件名称,要写好文件的后缀,不要少写和写错
                new File(entry.getValue()));
                //附件的文件地址,可以写绝对路径,若是相对路径,如./1.png,代表的是resources下的1.png
            }
        }
        helper.setTo(email); //发送给谁
        helper.setFrom(Objects.requireNonNull(javaMailSender.getUsername())); //谁发送的
        javaMailSender.send(mimeMessage);
    }
}

在测试类中使用工具类发送邮件(简单邮件、附件邮件),测试类如下:

@SpringBootTest
public class SendEmailTest {
    @Test
    public void TestSendEmail() throws MessagingException {
    	// 简单邮件的发送
        SendEmailUtils e = new SendEmailUtils ();
        e.SendSimpleEmail("标题","内容","接收邮箱的@qq.com");
        // 复杂邮件的发送
        HashMap<String, String> map = new HashMap<>(); //定义附件
        map.put("1.png","./1.png");  //相对路径,相对于resources目录下
        map.put("11.png","C:\\Users\\HP\\Pictures\\Saved Pictures\\11.png"); //绝对路径
        e.SendMimeEmail("s","s",true,"接收邮箱的@qq.com", map);
    }
}

这样就可以了

最后直接在需要使用发送邮件功能的类中new一个工具类SendEmailUtils调用发送邮件的方法就OK啦!

本文转载自【已解决: springBoot使用邮件发送进行封装时,报空指针异常】,原文链接:[https://www.codeleading.com/article/84722979296/]
特别感谢原文作者提供这篇优秀的文章!

因为借用了其他人的文章在这里真诚的感谢,我只是记录文章以后遇见问题的时候回来看看,非常感谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值