springboot邮件分发

       最近在项目中用到一个定时通知功能,通知就联想到一个邮件通知的方式,此外通过邮件我们还可以进行用户通过邮件注册、通过邮件找回密码等功能,这篇博客就简单介绍以下邮件的发送功能。

      在Java中,我们可以使用JavaMail API向任何电子邮件地址发送邮件,但是配置较为繁琐。Spring框架提供了一个JavaMailSender接口,进一步简化了邮件的配置,通过自动化配置类MailSenderAutoConfiguration,使得在Spring Boot应用中使用JavaMailSender更加方便。

一、项目前准备

1、依赖导入

在pom.xml中导入邮件实现依赖


    org.springframework.boot
    spring-boot-starter-mail

2、开启邮件服务

(1)点击设置

(2)点击账户

springboot邮件分发_第1张图片

(3)开启服务

      下拉找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击开启,按照qq邮箱提示进行一步步验证,最后获得授权吗,记得复制,授权码可重复进行申请,每次申请的授权码可能不同。

springboot邮件分发_第2张图片

3、创建邮件配置

 该配置为yml格式配置

spring:
    mail:
        #配置smtp服务主机地址
        # qq邮箱为smtp.qq.com          端口号465或587
        # sina    smtp.sina.cn
        # aliyun  smtp.aliyun.com
        # 163     smtp.163.com       端口号465或994
        host: smtp.qq.com
        #发送者邮箱
        username: [email protected]
        #配置密码,注意不是真正的密码,而是刚刚申请到的授权码
        password: xxxxx

        #端口号465或587
        port: 587
        #默认的邮件编码为UTF-8
        default-encoding: UTF-8
        #其他参数
        properties:
            mail:
                #配置SSL 加密工厂
                smtp:
                    ssl:
                        #本地测试,先放开ssl
                        enable: false
                        required: false
                    #开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误
                debug: true

二、发送邮件代码

1、简单邮件发送

(1)service层
 @Resource
 private JavaMailSender javaMailSender; 

 @Override
    public void sendSimpleMail(String from, String to, String subject, String text) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        // 发件人
        simpleMailMessage.setFrom(from);
        // 收件人
        simpleMailMessage.setTo(to);
        // 邮件主题
        simpleMailMessage.setSubject(subject);
        // 邮件内容
        simpleMailMessage.setText(text);
        javaMailSender.send(simpleMailMessage);
    }
(2)controller层
 @GetMapping("/sendSimpleMail")
    public void sendSimpleMail() {
        empRetireService.sendSimpleMail("发送方@qq.com",
                "接收方@qq.com",
                "test",
                "感谢你这么可爱,这么优秀!!!!!!");
    }
(3)postman进行测试

springboot邮件分发_第3张图片

邮件展示:

springboot邮件分发_第4张图片

 2、复杂邮件分发

    很多时候,邮件不止有简单的文字,很多邮件还可以携带样式和附件。

    使用 javaMailSender 创建一个 MimeMessage 实例,用 MimeMessageHelper 设置开启内嵌和附件功能,然后通过 addInline 方法嵌入图片,addAttachment 方法添加附件。

(1)service层
@Override
    public ResponseEntity sendMimeMail(String from, String to, String subject, String text) {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
//辅助创建MIME消息的类,使用它可以更加方便地创建和发送电子邮件。true表示创建的是表示创建的是多部分消息
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            // 过调用helper.setText(text, true)设置邮件的内容,第二个参数true表示将邮件内容解析为HTML格式。您可以在text参数中编写HTML代码或普通文本。
            helper.setText(text, true);
            //通过调用helper.addInline()方法,将路径下的图片资源嵌入到邮件中。logo是嵌入资源的ID,可以在邮件内容中通过引用该ID来显示图片
            helper.addInline("phone", new FileSystemResource("C:\\Users\\ASUS\\Desktop\\test图片\\"+"2020122122203861963.jpg"));
            //添加附件:通过调用helper.addAttachment()方法,将doc/logo.pdf路径下的PDF文件作为附件添加到邮件中。logo.pdf是附件的文件名,可以在邮件中显示该附件并提供下载。
            helper.addAttachment("20205622141367241.jpg", new FileSystemResource("C:\\Users\\ASUS\\Desktop\\test图片\\"+"20205622141367241.jpg"));
            javaMailSender.send(mimeMessage);
            return ResponseEntity.status(HttpStatus.CREATED).body("发送成功");
        } catch (MessagingException e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("e.getMessage()");
        }
    }

*注意事项:

   addAttachment方法的第二个参数可指定附件文件的资源对象,可以使用ClassPathResourceFileSystemResourceByteArrayResource等实现:

  • ClassPathResource:用于从类路径中加载资源文件。它使用相对于类路径的路径来查找并加载资源。
  • FileSystemResource:用于从文件系统中加载资源文件。它使用绝对或相对于当前工作目录的路径来查找并加载资源。以为我是直接从本地文件直接获取图片,所以采用FileSystemResource。
  • ByteArrayResource:用于将字节数组作为资源进行封装。它适用于将内存中的数据作为资源传递,而不是从文件系统或类路径加载。
(2)controller层
 @GetMapping("/sendMimeMail")
    public ResponseEntity sendMimeMail() {
        return empRetireService.sendMimeMail("[email protected]",
                "[email protected]",
                "test1",
                "

感谢你这么可爱,这么优秀!!!!!!


"+""); }
(3)Postman进行测试

springboot邮件分发_第5张图片

邮箱展示:

springboot邮件分发_第6张图片

你可能感兴趣的:(spring,boot,java,spring)