赞
踩
登录你的QQ邮箱,设置==>>账户,开启授权服务
按照qq官方系统提示操作完成后,会得到一个授权码,这个时候需要复制下来,后面需要用到
springboot项目的创建就不说了,说关键的地方;
- <!--email-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-mail</artifactId>
- </dependency>
- <!--模板引擎-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-freemarker</artifactId>
- </dependency>
# 邮箱配置 mail: # 配置 SMTP 服务器地址 host: smtp.qq.com # 发送者邮箱 username: 589xxxx56@qq.com # 配置密码,注意不是真正的密码,而是刚刚申请到的授权码 password: tfpczrcnxkfybahf # 端口号465或587 port: 587 # 默认的邮件编码为UTF-8 default-encoding: UTF-8 # 配置SSL 加密工厂 properties: mail: smtp: socketFactoryClass: javax.net.ssl.SSLSocketFactory #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误 debug: true
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Email Verification Code</title>
- </head>
- <body style="margin: 0; padding: 0; background-color: #f5f5f5;">
- <div style="max-width: 600px; margin: 0 auto;">
- <table cellpadding="0" cellspacing="0" align="center" style="width: 100%; border-collapse: collapse; background-color: #ffffff; font-family: Arial, sans-serif;">
- <tr>
- <th valign="middle" style="height: 60px; padding: 20px; background-color: #0074d3; border-radius: 5px 5px 0 0;">
- <h1 style="margin: 0; color: #ffffff; font-size: 24px;">TITLE</h1>
- </th>
- </tr>
- <tr>
- <td style="padding: 20px;">
- <div style="background-color: #ffffff; padding: 25px;">
- <h2 style="margin: 10px 0; font-size: 18px; color: #333333;">
- 尊敬的用户,
- </h2>
- <p style="margin: 10px 0; font-size: 16px; color: #333333;">
- 感谢您注册我们的产品. 您的账号正在进行电子邮件验证.
- </p>
- <p style="margin: 10px 0; font-size: 16px; color: #333333;">
- 验证码为: <span style="color: #1100ff;">{0}</span>
- </p>
- <p style="margin: 10px 0; font-size: 16px; color: #333333;">
- 验证码的有效期只有一分钟,请抓紧时间进行验证吧!
- </p>
- <p style="margin: 10px 0; font-size: 16px; color: #dc1818;">
- 如果非本人操作,请忽略此邮件
- </p>
- </div>
- </td>
- </tr>
- <tr>
- <td style="text-align: center; padding: 20px; background-color: #f5f5f5;">
- <p style="margin: 0; font-size: 12px; color: #747474;">
- XXXXX<br>
- Contact us: XXXXXXX@qq.com
- </p>
- <p style="margin: 10px 0; font-size: 12px; color: #747474;">
- This is an automated email, please do not reply.<br>
- © Company Name
- </p>
- </td>
- </tr>
- </table>
- </div>
- </body>
- </html>

验证码模版最好是由table标签来编写,这个好像是邮箱才能识别到的样式,核心是不能缺少 {0}
- public class CodeEntity {
- private String code;
- private String msg;
-
- public CodeEntity() {
- }
-
- public CodeEntity(String code,String msg) {
- this.code = code;
- this.msg = msg;
- }
-
-
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public String getMsg() {
- return msg;
- }
-
- public void setMsg(String msg) {
- this.msg = msg;
- }
- }

- import org.springframework.core.io.ClassPathResource;
- import org.springframework.core.io.Resource;
-
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.text.MessageFormat;
-
-
- public class EmailEngine {
- /**
- * 读取邮件模板
- * 替换模板中的信息
- */
- public String buildContent(String title) {
- //加载邮件html模板
- Resource resource = new ClassPathResource("templates/mailtemplate.ftl");
- InputStream inputStream = null;
- BufferedReader fileReader = null;
- StringBuffer buffer = new StringBuffer();
- String line = "";
- try {
- inputStream = resource.getInputStream();
- fileReader = new BufferedReader(new InputStreamReader(inputStream));
- while ((line = fileReader.readLine()) != null) {
- buffer.append(line);
- }
- } catch (Exception e) {
- System.out.println(e);
- } finally {
- if (fileReader != null) {
- try {
- fileReader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (inputStream != null) {
- try {
- inputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- //替换html模板中的参数
- return MessageFormat.format(buffer.toString(), title);
- }
-
- }

- import com.example.emailsendcodetest.entity.CodeEntity;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.mail.MailException;
-
- import org.springframework.mail.javamail.JavaMailSender;
- import org.springframework.mail.javamail.MimeMessageHelper;
- import org.springframework.web.bind.annotation.*;
-
- import javax.annotation.Resource;
- import javax.mail.MessagingException;
- import javax.mail.internet.MimeMessage;
- import java.util.Arrays;
- import java.util.Map;
- import java.util.Random;
-
- @RestController
- @RequestMapping("email")
- public class EmailController {
-
- @Resource
- private JavaMailSender javaMailSender;
-
- //读取yml文件中username的值并赋值给form
- @Value("${spring.mail.username}")
- private String from;
-
- @RequestMapping("sendEmail")
- public CodeEntity sendSimpleMail(@RequestParam(value = "emailReceiver") String emailReceiver) throws MessagingException {
- EmailEngine emailEngine = new EmailEngine();
- // 构建一个邮件对象
- // SimpleMailMessage message = new SimpleMailMessage();
- MimeMessage message = javaMailSender.createMimeMessage();
- MimeMessageHelper helper = new MimeMessageHelper(message, true);
-
- //返回给前端的code-json module
- CodeEntity codeEntity = new CodeEntity();
- // 设置邮件发送者
- helper.setFrom(from);
- // 设置邮件接收者
- helper.setTo(emailReceiver);
- // 设置邮件的主题
- helper.setSubject("注册验证码");
- // 设置邮件的正文
- Random random = new Random();
- StringBuilder code = new StringBuilder();
- for (int i = 0; i < 6; i++) {
- int r = random.nextInt(10);
- code.append(r);
- }
- String text = emailEngine.buildContent(code.toString());
- helper.setText(text,true);
- // 发送邮件
- try {
- javaMailSender.send(message);
- codeEntity.setEmail(Arrays.toString(message.getFrom()));
- codeEntity.setCode(code.toString());
- codeEntity.setMsg("success");
- return codeEntity;
- } catch (MailException e) {
- e.printStackTrace();
- }
- codeEntity.setEmail(Arrays.toString(message.getFrom()));
- codeEntity.setCode("null");
- codeEntity.setMsg("fail");
- return codeEntity;
- }

http://localhost/email/sendEmail?emailReceiver=879XXXX23@qq.com
这样做可以让前端获取数据做校验
用户接收到的的验证码邮件为html格式:
至此,web开发中的验证码模块开发完成。
你想拥有你从未拥有过的东西,就得去做你从未做过的事,加油
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。