• springboot邮件分发


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

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

    一、项目前准备

    1、依赖导入

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

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

    2、开启邮件服务

    (1)点击设置

    (2)点击账户

    (3)开启服务

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

    3、创建邮件配置

     该配置为yml格式配置

    1. spring:
    2. mail:
    3. #配置smtp服务主机地址
    4. # qq邮箱为smtp.qq.com 端口号465587
    5. # sina smtp.sina.cn
    6. # aliyun smtp.aliyun.com
    7. # 163 smtp.163.com 端口号465994
    8. host: smtp.qq.com
    9. #发送者邮箱
    10. username: xxxx@qq.com
    11. #配置密码,注意不是真正的密码,而是刚刚申请到的授权码
    12. password: xxxxx
    13. #端口号465587
    14. port: 587
    15. #默认的邮件编码为UTF-8
    16. default-encoding: UTF-8
    17. #其他参数
    18. properties:
    19. mail:
    20. #配置SSL 加密工厂
    21. smtp:
    22. ssl:
    23. #本地测试,先放开ssl
    24. enable: false
    25. required: false
    26. #开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误
    27. debug: true

    二、发送邮件代码

    1、简单邮件发送

    (1)service层
    1. @Resource
    2. private JavaMailSender javaMailSender;
    3. @Override
    4. public void sendSimpleMail(String from, String to, String subject, String text) {
    5. SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
    6. // 发件人
    7. simpleMailMessage.setFrom(from);
    8. // 收件人
    9. simpleMailMessage.setTo(to);
    10. // 邮件主题
    11. simpleMailMessage.setSubject(subject);
    12. // 邮件内容
    13. simpleMailMessage.setText(text);
    14. javaMailSender.send(simpleMailMessage);
    15. }
    (2)controller层
    1. @GetMapping("/sendSimpleMail")
    2. public void sendSimpleMail() {
    3. empRetireService.sendSimpleMail("发送方@qq.com",
    4. "接收方@qq.com",
    5. "test",
    6. "感谢你这么可爱,这么优秀!!!!!!");
    7. }
    (3)postman进行测试

    邮件展示:

     2、复杂邮件分发

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

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

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

    *注意事项:

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

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

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


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

    邮箱展示:

  • 相关阅读:
    【Qt】 FFmpeg+Qt windows 32位或者64位环境搭建
    全网唯一OpenCyphal/UAVCAN教程(8)libcanard介绍
    UE5读取json文件
    soildwork2022怎么恢复软件界面的默认设置?
    DVT:华为提出动态级联Vision Transformer,性能杠杠的 | NeurIPS 2021
    java-net-php-python-90儿童失踪登记网站计算机毕业设计程序
    vue3项目,vite+vue3+ts+pinia(8)-开发和生产模式配置+跨域
    机器学习2--matplotlib绘图包
    第五天 脚本与UI系统
    激光、超声波、霍尔、DS18B20 温度、模拟温度传感器 | 配合Arduino使用案例
  • 原文地址:https://blog.csdn.net/qq_53723728/article/details/134245123