SpringBoot整合QQ邮箱发送验证码

一、QQ开启SMTP

打开QQ邮箱,点击设置,进入账号,往下滑后,看见服务状态后,点击管理服务

         进入管理服务后,打开服务,然后获取授权码

二 、导入依赖

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

三、 yaml配置

  
spring:
  mail:
  host: smtp.qq.com
  username: "邮箱号" #可以改成你的邮箱号,需要开启smtp
  password: "授权码"
  default-encoding: UTF-8
  protocol: smtp
  port: 465
  properties:
    mail:
      smtp:
        auth: true
        socketFactory:
          class: javax.net.ssl.SSLSocketFactory
          port: 465
        ssl:
          enable: true
        starttls:
          enable: true
          required: true
 

   四、Email工具类和EmailDTO 类

1.Email工具类

@Slf4j
@Component
public class EmailUtil{

    @Value("${spring.mail.username}")
    private String email;

    @Resource
    private JavaMailSender javaMailSender;

    @Resource
    private JavaMailSenderImpl mailSender;

    @Resource
    private TemplateEngine templateEngine;

    public void sendHtmlMail(EmailDTO emailDTO) {
        try {
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
            Context context = new Context();
            context.setVariables(emailDTO.getCommentMap());
            String process = templateEngine.process(emailDTO.getTemplate(), context);
            mimeMessageHelper.setFrom(email);
            mimeMessageHelper.setTo(emailDTO.getEmail());
            mimeMessageHelper.setSubject(emailDTO.getSubject());
            mimeMessageHelper.setText(process, true);
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

2. EmailDTO 类

        用于封装发送所需要的信息,包括对方邮箱号,验证码、主题、内容、引用模板

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmailDTO implements Serializable {

    private String email;

    private String code;

    private String subject;

    private Map<String, Object> commentMap;

    private String template;

}

五、 使用短信邮件发送示例

        通过什么Map将所需要发送的内容进行封装,email为对方的邮箱号,subject为本次邮件的主题,最后通过EmailUtil 的sendHtmlMail()方法进行发送即可。

	@Autowired
	private EmailUtil emailUtil;

	@Test
	public void sendMessage(){
		Map<String, Object> map = new HashMap<>();
		map.put("content", "-------发送的内容---------");
		EmailDTO emailDTO = EmailDTO.builder()
				.template("common.html")
				.email("需要发送的邮箱")
				.subject("主题")
				.commentMap(map).build();
		CompletableFuture.runAsync(()-> emailUtil.sendHtmlMail(emailDTO));
	}

       common.html模板(放在项目src/main/resources/templates/common.html路径下)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div style="
    border-radius: 10px 10px 10px 10px;
    font-size: 13px;
    color: #555555;
    width: 666px;
    margin: 50px auto;
    border: 1px solid #eee;
    max-width: 100%;
    background: #ffffff repeating-linear-gradient(-45deg,#fff,#fff 1.125rem,transparent 1.125rem,transparent 2.25rem);
    box-shadow: 0 1px 5px rgb(0 0 0 / 15%);">
    <div style="
    background:#49BDAD;
    color:#ffffff;
    border-radius: 10px 10px 0 0;
    background-image: -moz-linear-gradient(0deg, rgb(67, 198, 184), rgb(255, 209, 244));
    background-image: -webkit-linear-gradient(0deg, rgb(67, 198, 184), rgb(255, 209, 244));
    height: 66px;">
        <p style="font-size:15px;
        word-break:break-all;
        padding: 23px 32px;
        margin:0;
        background-color: hsla(0,0%,100%,.4);
        border-radius: 10px 10px 0 0;">
            来自<a style="text-decoration:none;
            color:#12addb" href="https://www.pengzhenggao.top">后台管理</a>的邮件
        </p>
    </div>
    <div style="margin:20px auto;width:90%">
        <div style="background: #f5f5f5;
        margin:20px 0;
        padding:15px;
        border-radius:5px;
        font-size:14px;">
            <p th:utext="${content}"></p>
        </div>
        <div style="color: #8c8c8c; font-size: 10px;width: 100%;text-align: center;word-wrap: break-word;">
            <p style="padding: 20px">我们不会向你索取任何验证码,请勿暴露验证码于他人</p>
        </div>
    </div>
</div>
</body>
</html>

### Spring Boot 整合 QQ 邮箱 SMTP 实现发送验证码功能 #### 一、引入依赖 为了使 Spring Boot 应用程序能够处理邮件操作,需在 `pom.xml` 文件中加入 Mail Starter 依赖。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 此依赖会自动配置 JavaMailSender 接口的一个实现类 SimpleMailMessage 或 MimeMessageHelper 来帮助构建和发送电子邮件消息[^1]。 #### 二、配置文件设置 编辑项目的 `application.properties` 文件以包含必要的 QQ 邮箱 SMTP 设置: ```properties spring.mail.host=smtp.qq.com spring.mail.port=465 spring.mail.username=your_email_account@qq.com spring.mail.password=your_authorization_code spring.mail.protocol=smtps spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.socketFactory.class=com.sun.net.ssl.SSLSocketFactory spring.mail.properties.mail.smtp.socketFactory.fallback=false spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true ``` 这里需要注意的是,对于 QQ 邮箱而言,应当启用 SSL 加密连接,并且使用授权码而非登录密码作为身份验证凭证[^2]。 #### 三、创建服务组件 定义一个名为 `EmailService.java` 的新类用于封装具体的业务逻辑。该类负责组装并调用实际的邮件发送过程。 ```java @Service public class EmailService { @Autowired private JavaMailSender javaMailSender; /** * 发送简单文本形式的验证码至指定地址 */ public void sendVerificationCode(String toAddress, String verificationCode){ try { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true); // 设定发件人信息以及收件方列表 helper.setFrom("no-reply@domain.com"); helper.setTo(toAddress); // 主题与正文内容设定 helper.setSubject("[System Name] Your Verification Code"); StringBuilder sb = new StringBuilder("<html><body>"); sb.append("<h3>Your one-time verification code is:</h3>") .append("<div style='font-size: large;'>").append(verificationCode).append("</div>") .append("</body></html>"); helper.setText(sb.toString(), true); // 第二参数设为true表示支持HTML格式 // 执行异步发送任务 CompletableFuture.runAsync(() ->{ try { javaMailSender.send(mimeMessage); } catch (Exception e) { System.err.println(e.getMessage()); } }); }catch(MessagingException ex){ throw new RuntimeException(ex); } } } ``` 上述代码片段展示了如何利用 `JavaMailSender` 和 `MimeMessageHelper` 类型来准备一封 HTML 格式的电子信件,并将其提交给后台线程池执行非阻塞式投递动作[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱生活,更爱技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值