• Springboot发送邮件


    一、获取授权码

    1、以QQ邮箱为例,页面首部找到设置

    在这里插入图片描述

    2、开启POP3/SMTP服务

    在这里插入图片描述

    3、获取授权码

    在这里插入图片描述

    二、SpringBoot集成邮件发送

    1、环境配置
    • 添加依赖

          
              org.springframework.boot
              spring-boot-starter-mail
              ${springboot.version}
          
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • application.properties

      邮件

      spring.mail.default-encoding= utf-8

      配置 SMTP 服务器地址

      spring.mail.host= smtp.qq.com
      #发送方邮件名
      spring.mail.username= xxxx@qq.com
      #授权码
      spring.mail.password= xxxxxx

    邮箱类型

    SMTP服务器地址

    端口号

    QQ邮箱

    smtp.qq.com

    465或587

    sina邮箱

    smtp.sina.cn

    465或587

    126邮箱

    smtp.126.com

    465或994

    aliyun邮箱

    smtp.aliyun.com

    465或994

    163邮箱

    smtp.163.com

    465或994

    yeah邮箱

    smtp.yeah.net

    465或994

    • application.yml(与application.properties任选其一既可)

      spring:
      #邮箱基本配置
      mail:
      #配置smtp服务主机地址
      host: smtp.qq.com
      #发送者邮箱
      username: xxxxxxx@qq.com
      #配置密码,注意不是真正的密码,而是刚刚申请到的授权码
      password: xxxxxxxxxxx
      #端口号465或587
      port: 587
      #默认的邮件编码为UTF-8
      default-encoding: UTF-8
      #其他参数
      properties:
      mail:
      #配置SSL 加密工厂
      smtp:
      ssl:
      #本地测试,先放开ssl
      enable: false
      required: false
      #开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误
      debug: true

    2、代码编写
    • MailRequest实体

      public class MailRequest implements Serializable {
      /**
      * 接收人
      */
      private String sendTo;

      /**
       *  邮件主题
       */
      private String subject;
      
      /**
       *  邮件内容
       */
      private String text;
      
      /**
       *  附件路径
       */
      private String filePath;
      
      public String getSendTo() {
          return sendTo;
      }
      
      public void setSendTo(String sendTo) {
          this.sendTo = sendTo;
      }
      
      public String getSubject() {
          return subject;
      }
      
      public void setSubject(String subject) {
          this.subject = subject;
      }
      
      public String getText() {
          return text;
      }
      
      public void setText(String text) {
          this.text = text;
      }
      
      public String getFilePath() {
          return filePath;
      }
      
      public void setFilePath(String filePath) {
          this.filePath = filePath;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46

      }

    • SendMailService

      public interface SendMailService {

      /**
       * 简单文本邮件
       *
       * @param mailRequest
       * @return
       */
      void sendSimpleMail(MailRequest mailRequest);
      
      
      /**
       * Html格式邮件,可带附件
       *
       * @param mailRequest
       * @return
       */
      void sendHtmlMail(MailRequest mailRequest);
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

      }

    • SendMailServiceImpl

      @Service
      public class SendMailServiceImpl implements SendMailService {

      //注入邮件工具类
      @Autowired
      private JavaMailSender javaMailSender;
      
      @Value("${spring.mail.username}")
      private String sendMailer;
      
      private static final Logger logger = LoggerFactory.getLogger(SendMailServiceImpl.class);
      
      public void checkMail(MailRequest mailRequest) {
          Assert.notNull(mailRequest,"邮件请求不能为空");
          Assert.notNull(mailRequest.getSendTo(), "邮件收件人不能为空");
          Assert.notNull(mailRequest.getSubject(), "邮件主题不能为空");
          Assert.notNull(mailRequest.getText(), "邮件收件人不能为空");
      }
      
      @Override
      public void sendSimpleMail(MailRequest mailRequest) {
          SimpleMailMessage message = new SimpleMailMessage();
          checkMail(mailRequest);
          //邮件发件人
          message.setFrom(sendMailer);
          //邮件收件人 1或多个
          message.setTo(mailRequest.getSendTo().split(","));
          //邮件主题
          message.setSubject(mailRequest.getSubject());
          //邮件内容
          message.setText(mailRequest.getText());
          //邮件发送时间
          message.setSentDate(new Date());
      
          javaMailSender.send(message);
          logger.info("发送邮件成功:{}->{}",sendMailer,mailRequest.getSendTo());
      }
      
      
      
      @Override
      public void sendHtmlMail(MailRequest mailRequest) {
          MimeMessage message = javaMailSender.createMimeMessage();
          checkMail(mailRequest);
          try {
              MimeMessageHelper helper = new MimeMessageHelper(message,true);
              //邮件发件人
              helper.setFrom(sendMailer);
              //邮件收件人 1或多个
              helper.setTo(mailRequest.getSendTo().split(","));
              //邮件主题
              helper.setSubject(mailRequest.getSubject());
              //邮件内容
              helper.setText(mailRequest.getText(),true);
              //邮件发送时间
              helper.setSentDate(new Date());
      
              String filePath = mailRequest.getFilePath();
              if (StringUtils.hasText(filePath)) {
                  FileSystemResource file = new FileSystemResource(new File(filePath));
                  String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
                  helper.addAttachment(fileName,file);
              }
              javaMailSender.send(message);
              logger.info("发送邮件成功:{}->{}",sendMailer,mailRequest.getSendTo());
          } catch (MessagingException e) {
              logger.error("发送邮件时发生异常!",e);
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66

      }

    • SendMailController

      @RestController
      @RequestMapping(“/send-mail”)
      @Api(value = “发送邮件接口”,tags = {“发送邮件接口”})
      public class SendMailController {
      @Autowired
      private SendMailService sendMailService;

      @PostMapping("/simple")
      public void SendSimpleMessage(@RequestBody MailRequest mailRequest) {
          sendMailService.sendSimpleMail(mailRequest);
      }
      
      @PostMapping("/html")
      public void SendHtmlMessage(@RequestBody MailRequest mailRequest) { sendMailService.sendHtmlMail(mailRequest);}
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      }

    三、测试邮件发送

    • 普通文本文件
      在这里插入图片描述

    在这里插入图片描述

    • html格式邮件,可添加附件

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    java计算机毕业设计疫情下发热门诊管理系统MyBatis+系统+LW文档+源码+调试部署
    社交媒体数据恢复:Meetalk
    【C++】入门三
    【阅读和学习代码】VoxelNet
    深度优先搜索(DFS)和广度优先搜索(BFS)
    【乐吾乐3D可视化组态编辑器】灯光
    F. Alex‘s whims Codeforces Round 909 (Div. 3) 1899F
    ABP微服务系列学习-对接Apollo配置中心
    七大排序算法——快速排序
    k8s的入门和项目部署
  • 原文地址:https://blog.csdn.net/m0_67401270/article/details/126114467