Springboot集成mail邮箱实现邮件功能

提示:文章如有错误的地方请指出,以免误人子弟!

文章目录


提示:以下是本篇文章正文内容,下面案例可供参考

邮箱设置

这边主要展示qq邮箱设置,网易或别的邮箱请自行百度设置

  1. 打开账号POP3/SMTP服务
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述注意保存授权码

  2. 添加依赖,为了让验证码页面好看点,咱们可以使用thymeleaf

<!-- 邮件 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- thymeleaf -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  1. yaml 配置
spring:
  mail:
    # 邮箱服务器地址
    host: smtp.qq.com
    # 账号
    username: qq号
    # 密码
    password: 上面qq邮箱的授权码
    # 编码格式
    default-encoding: UTF-8
    # 超时时间
    properties:
      mail:
        smtp:
          auth: true
          enable: true
          connectiontimeout: 10000
          timeout: 10000
          writetimeout: 10000
          # 配置SSL 加密工厂
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
          # 表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
          debug: true
  1. 封装工具类
/**
     * description: 使用thymeleaf模板发送邮件
     *
     * @param subject 主题
     * @param map Thymeleaf html模板参数
     * @param htmlName 模板名称
     * @param addressee 收件人
     * @return boolean
     * @author Tigger
     */
    public boolean sendThymeleafMail(String subject, Map<String, Object> map, String htmlName, String... addressee) {
        boolean flag = false;
        try {
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper mimeMessageHelper = null;
            mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            // 邮件发送者
            mimeMessageHelper.setFrom(from);
            // 邮件接受者
            mimeMessageHelper.setTo(addressee);
            // 主题
            mimeMessageHelper.setSubject(subject);

            // 这里引入的是Template的Context
            Context context = new Context();
            // 设置模板中的变量
            context.setVariables(map);
            // 第一个参数为模板的名称
            String process = templateEngine.process(htmlName, context);
            // 第二个参数true表示这是一个html文本
            mimeMessageHelper.setText(process,true);
            javaMailSender.send(mimeMessage);
            flag = true;
        }
        catch (MessagingException e) {
            e.printStackTrace();
        }
        return flag;
    }
  1. 使用,这边使用了lombok和redis,需要的自己引下依赖,不需要的自行删除。
/**
  * description: 生成指定位数短信验证码
  *
  * @param count 指定位数
  * @return java.lang.String
  * @author Tigger
  */
 private String getRandCode(int count) {
     return String.valueOf((int)((Math.random()*9+1)* Math.pow(10,count-1)));
 }

/**
   * description: 发送邮箱验证码
   *
   * @param mailNumber 发送邮箱账号
   * @return java.lang.String
   * @author Tigger
   */
  public String sendCodeMailInfo(String mailNumber) {
      String sendMessage = null;
      String randCode = getRandCode(6);
      log.info("邮箱验证码-{}", randCode);
      Map<String, Object> stringObjectMap = new HashMap<>(1);
      stringObjectMap.put("codeMessage", randCode);
      boolean mail = mailUtil.sendThymeleafMail("验证码", stringObjectMap, "mailAssign.html", mailNumber);
      if (mail) {
          log.info("邮箱验证码发送成功");
          // 将验证码放入redis
          boolean set = redisUtil.set(mailNumber + FinalCode.REDIS_Mail_SMS, randCode, FinalCode.SECOND_NUMBER);
          if (set) {
              log.info("短信验证码缓存成功");
          }
          sendMessage = "邮箱验证码发送成功";
      }
      return sendMessage;
  }
  1. html文件
<!DOCTYPE html>
<!--suppress ALL-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>登录验证</title>
</head>
<body>
    <div class="divBox">
        <img class="imgFile" src="data:image/jpeg;base64,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"></img>
        <h2>唯一后台管理平台,验证码如下:</h2>
        <div class="midd">
            <span><span class="font">唯一后台管理平台</span></span>
            <span>你的验证码是
                <span class="code" th:text="${codeMessage}"></span>
                ,此验证码用于登录
                <a href="https://www.baidu.com" class="fontBox">唯一后台管理平台</a><span class="spanFont">60</span>秒内有效!</span>
                <div class="fontBottom">请勿将验证码泄露给他人,如非本人操作,可不用理会!</div>
        </div>
    </div>
    <style>
        .divBox {
            margin-top: 5%;
            text-align: center;
        }
        .imgFile {
            width: 10%;
            height: 10%;
            border-radius: 50%;
        }
        .midd {
            margin-top: 1%;
        }
        .font{
            font-weight: bold;
        }
        .code {
            color: red;
            font-weight: bold;
        }
        .fontBox{
            color: cornflowerblue;
        }
        .spanFont {
            color: red;
        }
        .fontBottom {
            margin-top: 1%;
        }
    </style>
</body>
</html>
  1. 使用效果
    在这里插入图片描述

验证码生成参考链接


希望对你有所帮助!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Spring Boot中集成邮箱验证码功能,你可以按照以下步骤进行操作: 1. 在项目的pom.xml文件中添加mail模块的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 这样就可以使用Spring Boot提供的邮件功能了。\[1\] 2. 在配置文件(application.properties或application.yml)中填写相关的邮箱配置,例如使用163邮箱: ```properties # Mail spring.mail.host=smtp.163.com spring.mail.username=your-email@163.com spring.mail.password=your-password spring.mail.default-encoding=UTF-8 mail.from=your-email@163.com ``` 其中,`spring.mail.host`是SMTP服务器地址,`spring.mail.username`和`mail.from`是你的邮箱地址,`spring.mail.password`是你的邮箱授权码(不是邮箱密码)。你需要在相关邮箱设置中开启SMTP服务,并获取授权码。\[2\]\[3\] 3. 在你的代码中使用JavaMailSender发送邮件,可以通过注入`JavaMailSender`对象来实现: ```java @Autowired private JavaMailSender javaMailSender; public void sendVerificationCode(String email, String code) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(email); message.setSubject("验证码"); message.setText("您的验证码是:" + code); javaMailSender.send(message); } ``` 以上代码示例中,`sendVerificationCode`方法用于发送验证码邮件,其中`email`是收件人邮箱地址,`code`是验证码内容。你可以根据实际需求自定义邮件的主题和内容。 这样,你就可以在Spring Boot中集成邮箱验证码功能了。记得替换相关配置为你自己的邮箱信息。 #### 引用[.reference_title] - *1* *2* *3* [Spring Boot 整合163或者qq邮箱发送验证码](https://blog.csdn.net/hghjgkjn/article/details/125952509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值