当前位置:   article > 正文

基于SpringBoot的邮箱验证码-以QQ邮箱为例_邮件验证码模板

邮件验证码模板

前期设置

登录你的QQ邮箱,设置==>>账户,开启授权服务

 按照qq官方系统提示操作完成后,会得到一个授权码,这个时候需要复制下来,后面需要用到

springboot项目的创建就不说了,说关键的地方;

pom.xml

  1. <!--email-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-mail</artifactId>
  5. </dependency>
  6. <!--模板引擎-->
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-freemarker</artifactId>
  10. </dependency>

application.yml

  1. # 邮箱配置
  2. mail:
  3. # 配置 SMTP 服务器地址
  4. host: smtp.qq.com
  5. # 发送者邮箱
  6. username: 589xxxx56@qq.com
  7. # 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
  8. password: tfpczrcnxkfybahf
  9. # 端口号465或587
  10. port: 587
  11. # 默认的邮件编码为UTF-8
  12. default-encoding: UTF-8
  13. # 配置SSL 加密工厂
  14. properties:
  15. mail:
  16. smtp:
  17. socketFactoryClass: javax.net.ssl.SSLSocketFactory
  18. #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
  19. debug: true

验证码模版

mailtemplate.ftl

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Email Verification Code</title>
  8. </head>
  9. <body style="margin: 0; padding: 0; background-color: #f5f5f5;">
  10. <div style="max-width: 600px; margin: 0 auto;">
  11. <table cellpadding="0" cellspacing="0" align="center" style="width: 100%; border-collapse: collapse; background-color: #ffffff; font-family: Arial, sans-serif;">
  12. <tr>
  13. <th valign="middle" style="height: 60px; padding: 20px; background-color: #0074d3; border-radius: 5px 5px 0 0;">
  14. <h1 style="margin: 0; color: #ffffff; font-size: 24px;">TITLE</h1>
  15. </th>
  16. </tr>
  17. <tr>
  18. <td style="padding: 20px;">
  19. <div style="background-color: #ffffff; padding: 25px;">
  20. <h2 style="margin: 10px 0; font-size: 18px; color: #333333;">
  21. 尊敬的用户,
  22. </h2>
  23. <p style="margin: 10px 0; font-size: 16px; color: #333333;">
  24. 感谢您注册我们的产品. 您的账号正在进行电子邮件验证.
  25. </p>
  26. <p style="margin: 10px 0; font-size: 16px; color: #333333;">
  27. 验证码为: <span style="color: #1100ff;">{0}</span>
  28. </p>
  29. <p style="margin: 10px 0; font-size: 16px; color: #333333;">
  30. 验证码的有效期只有一分钟,请抓紧时间进行验证吧!
  31. </p>
  32. <p style="margin: 10px 0; font-size: 16px; color: #dc1818;">
  33. 如果非本人操作,请忽略此邮件
  34. </p>
  35. </div>
  36. </td>
  37. </tr>
  38. <tr>
  39. <td style="text-align: center; padding: 20px; background-color: #f5f5f5;">
  40. <p style="margin: 0; font-size: 12px; color: #747474;">
  41. XXXXX<br>
  42. Contact us: XXXXXXX@qq.com
  43. </p>
  44. <p style="margin: 10px 0; font-size: 12px; color: #747474;">
  45. This is an automated email, please do not reply.<br>
  46. © Company Name
  47. </p>
  48. </td>
  49. </tr>
  50. </table>
  51. </div>
  52. </body>
  53. </html>

验证码模版最好是由table标签来编写,这个好像是邮箱才能识别到的样式,核心是不能缺少 {0}

自定义邮箱验证码模型类

  1. public class CodeEntity {
  2. private String code;
  3. private String msg;
  4. public CodeEntity() {
  5. }
  6. public CodeEntity(String code,String msg) {
  7. this.code = code;
  8. this.msg = msg;
  9. }
  10. public String getCode() {
  11. return code;
  12. }
  13. public void setCode(String code) {
  14. this.code = code;
  15. }
  16. public String getMsg() {
  17. return msg;
  18. }
  19. public void setMsg(String msg) {
  20. this.msg = msg;
  21. }
  22. }

设置模版邮箱引擎

EmailEngine.java

  1. import org.springframework.core.io.ClassPathResource;
  2. import org.springframework.core.io.Resource;
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.text.MessageFormat;
  8. public class EmailEngine {
  9. /**
  10. * 读取邮件模板
  11. * 替换模板中的信息
  12. */
  13. public String buildContent(String title) {
  14. //加载邮件html模板
  15. Resource resource = new ClassPathResource("templates/mailtemplate.ftl");
  16. InputStream inputStream = null;
  17. BufferedReader fileReader = null;
  18. StringBuffer buffer = new StringBuffer();
  19. String line = "";
  20. try {
  21. inputStream = resource.getInputStream();
  22. fileReader = new BufferedReader(new InputStreamReader(inputStream));
  23. while ((line = fileReader.readLine()) != null) {
  24. buffer.append(line);
  25. }
  26. } catch (Exception e) {
  27. System.out.println(e);
  28. } finally {
  29. if (fileReader != null) {
  30. try {
  31. fileReader.close();
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. if (inputStream != null) {
  37. try {
  38. inputStream.close();
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. }
  44. //替换html模板中的参数
  45. return MessageFormat.format(buffer.toString(), title);
  46. }
  47. }

编写发送邮件的控制器

  1. import com.example.emailsendcodetest.entity.CodeEntity;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.mail.MailException;
  4. import org.springframework.mail.javamail.JavaMailSender;
  5. import org.springframework.mail.javamail.MimeMessageHelper;
  6. import org.springframework.web.bind.annotation.*;
  7. import javax.annotation.Resource;
  8. import javax.mail.MessagingException;
  9. import javax.mail.internet.MimeMessage;
  10. import java.util.Arrays;
  11. import java.util.Map;
  12. import java.util.Random;
  13. @RestController
  14. @RequestMapping("email")
  15. public class EmailController {
  16. @Resource
  17. private JavaMailSender javaMailSender;
  18. //读取yml文件中username的值并赋值给form
  19. @Value("${spring.mail.username}")
  20. private String from;
  21. @RequestMapping("sendEmail")
  22. public CodeEntity sendSimpleMail(@RequestParam(value = "emailReceiver") String emailReceiver) throws MessagingException {
  23. EmailEngine emailEngine = new EmailEngine();
  24. // 构建一个邮件对象
  25. // SimpleMailMessage message = new SimpleMailMessage();
  26. MimeMessage message = javaMailSender.createMimeMessage();
  27. MimeMessageHelper helper = new MimeMessageHelper(message, true);
  28. //返回给前端的code-json module
  29. CodeEntity codeEntity = new CodeEntity();
  30. // 设置邮件发送者
  31. helper.setFrom(from);
  32. // 设置邮件接收者
  33. helper.setTo(emailReceiver);
  34. // 设置邮件的主题
  35. helper.setSubject("注册验证码");
  36. // 设置邮件的正文
  37. Random random = new Random();
  38. StringBuilder code = new StringBuilder();
  39. for (int i = 0; i < 6; i++) {
  40. int r = random.nextInt(10);
  41. code.append(r);
  42. }
  43. String text = emailEngine.buildContent(code.toString());
  44. helper.setText(text,true);
  45. // 发送邮件
  46. try {
  47. javaMailSender.send(message);
  48. codeEntity.setEmail(Arrays.toString(message.getFrom()));
  49. codeEntity.setCode(code.toString());
  50. codeEntity.setMsg("success");
  51. return codeEntity;
  52. } catch (MailException e) {
  53. e.printStackTrace();
  54. }
  55. codeEntity.setEmail(Arrays.toString(message.getFrom()));
  56. codeEntity.setCode("null");
  57. codeEntity.setMsg("fail");
  58. return codeEntity;
  59. }

项目结构如图

接口测试

http://localhost/email/sendEmail?emailReceiver=879XXXX23@qq.com

 这样做可以让前端获取数据做校验

用户接收到的的验证码邮件为html格式:

至此,web开发中的验证码模块开发完成。

你想拥有你从未拥有过的东西,就得去做你从未做过的事,加油

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/686301
推荐阅读
相关标签
  

闽ICP备14008679号