• 干货,某大厂小姐姐深夜让我说出了秘密-springboot发邮件 原创


    后端依赖

    1. <!--引入mail依赖-->
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-mail</artifactId>
    5. </dependency>
    6. <!--使用thymeleaf构建邮件模板-->
    7. <dependency>
    8. <groupId>org.springframework.boot</groupId>
    9. <artifactId>spring-boot-starter-thymeleaf</artifactId>
    10. </dependency>
    11. <!--验证码-->
    12. <dependency>
    13. <groupId>com.github.whvcse</groupId>
    14. <artifactId>easy-captcha</artifactId>
    15. <version>1.6.2</version>
    16. </dependency>

    后端配置文件application.yml

    1. spring:
    2. # 关闭thymeleaf缓存
    3. thymeleaf:
    4. cache: false
    5. mail:
    6. host: smtp.163.com
    7. username: 你的邮箱
    8. password: 你的邮箱授权码(163邮箱->设置->开启pop3smtp->获取授权码)
    9. default-encoding: UTF-8
    10. protocol: smtp
    11. properties:
    12. mail:
    13. smtp:
    14. auth: true # 启用SMTP认证
    15. starttls:
    16. enabled: true # 启用SMTP认证
    17. required: true # 必须采用加密链接

    后端工具类

    1. package com.test.empback.utils;
    2. import java.io.File;
    3. import javax.mail.MessagingException;
    4. import javax.mail.internet.MimeMessage;
    5. import lombok.extern.slf4j.Slf4j;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.beans.factory.annotation.Value;
    8. import org.springframework.boot.autoconfigure.mail.MailProperties;
    9. import org.springframework.mail.SimpleMailMessage;
    10. import org.springframework.mail.javamail.JavaMailSender;
    11. import org.springframework.mail.javamail.MimeMessageHelper;
    12. import org.springframework.stereotype.Component;
    13. import org.springframework.stereotype.Service;
    14. import javax.mail.internet.MimeMessage;
    15. @Component("mailUtils")
    16. @Slf4j
    17. public class MailUtils {
    18. @Autowired
    19. private MailProperties mailProperties;
    20. @Autowired
    21. private JavaMailSender mailSender;
    22. // 发送简单邮件
    23. public void sendSimpleMall(String to, String subject, String content) {
    24. try {
    25. SimpleMailMessage message = new SimpleMailMessage();
    26. message.setFrom(mailProperties.getUsername());
    27. message.setTo(to);
    28. message.setCc(mailProperties.getUsername());
    29. message.setSubject(subject);
    30. message.setText(content);
    31. mailSender.send(message);
    32. }
    33. catch(Exception e) {
    34. e.printStackTrace();
    35. }
    36. }
    37. // 发送带附件的邮件
    38. public void sendAttachFileMail(String to, String subject, String content, File file) {
    39. try {
    40. MimeMessage message = mailSender.createMimeMessage();
    41. MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
    42. //邮件发送人
    43. messageHelper.setFrom(mailProperties.getUsername());
    44. //邮件接收人
    45. messageHelper.setTo(to);
    46. //邮件主题
    47. message.setSubject(subject);
    48. //邮件内容
    49. messageHelper.setText(content);
    50. //添加附件
    51. messageHelper.addAttachment(file.getName(), file);
    52. //发送
    53. mailSender.send(message);
    54. } catch (MessagingException e) {
    55. e.printStackTrace();
    56. }
    57. }
    58. // 发送HTML格式文件
    59. public void sendHtmlMail(String to, String subject, String content) {
    60. try {
    61. MimeMessage message = mailSender.createMimeMessage();
    62. MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
    63. //邮件发送人
    64. messageHelper.setFrom(mailProperties.getUsername());
    65. //邮件接收人
    66. messageHelper.setTo(to);
    67. //邮件主题
    68. message.setSubject(subject);
    69. //邮件内容
    70. messageHelper.setText(content, true);
    71. //发送
    72. mailSender.send(message);
    73. } catch (MessagingException e) {
    74. e.printStackTrace();
    75. }
    76. }
    77. }

    后端邮件html模板:这个必须方法resource下边的templates文件夹下

    文件名:mailtemplate.html

    1. <!DOCTYPE html>
    2. <html xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <title>邮箱验证</title>
    5. <meta charset="utf-8">
    6. </head>
    7. <body>
    8. <!-- 头部 -->
    9. <div style="padding: 10px; background-color: #393D49;">
    10. <h2 style="color: #FFFFFF; margin: 0px;">人事招聘系统</h2>
    11. </div>
    12. <!-- 内容 -->
    13. <div style="padding-top: 10px; padding-bottom: 10px;">
    14. <div style="background-color: snow; padding: 20px;">
    15. <div>
    16. <h3>尊敬的用户:您好!</h3>
    17. <p>说明:您现在正在进行敏感操作,为了确保您的账户安全,我们将通过邮件对您进行身份验证。</p>
    18. <p th:text="${message}"></p>
    19. <div>
    20. <h4>本次的验证码为:</h4>
    21. <div style="background-color: #EBEEF5; padding: 10px;">
    22. <h3 th:text="${code}"></h3>
    23. </div>
    24. <h4>有效期为1分钟</h4>
    25. </div>
    26. <p style="margin-top: 15px;">发件人:人事招聘管理系统</p>
    27. </div>
    28. </div>
    29. </div>
    30. <!-- 页底 -->
    31. <div style="padding: 10px; text-align: center; background-color: #2F4056;">
    32. <p style="margin: 0px; color: #FFFFFF;">Copyright © 2020 <a href="http://localhost:8080/" style="color: #FFFFFF;">人事招聘系统</a> All Rights Reserved.</p>
    33. </div>
    34. </body>
    35. </html>

    控制器发送邮件

    1. public void sendCode(String userName,String email) {
    2. try {
    3. // 随机生成验证码
    4. SpecCaptcha captcha = new SpecCaptcha(10, 10, 4);
    5. captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);
    6. // 存入键值对并设置过期时间(1分钟内有效)
    7. redisUtil.set(CommonConstant.PREFIX_PASSFIND_CODE+userName,captcha.text(),CommonConstant.PASSFIND_CODE_EXPIRE_TIME);
    8. String message = "详情:您正在尝试进行找回密码操作,若非是您本人的行为,请忽略!";
    9. // 设置邮件内容
    10. Context context = new Context();
    11. context.setVariable("message", message);
    12. context.setVariable("code", captcha.text());
    13. String mail = templateEngine.process("mailtemplate.html", context);
    14. // 发送邮件
    15. mailUtils.sendHtmlMail(email, "邮箱验证码", mail);
    16. } catch (Exception e) {
    17. throw new RuntimeException(e);
    18. }
    19. }

    完事,这就是所有的实现了,最后截个图

  • 相关阅读:
    如何用个人数据Milvus Cloud知识库构建 RAG 聊天机器人?(上)
    【深度学习】Transformer梳理
    如何正确复制CSDN文章到自己的博客
    输出最大选修学分问题
    C++:string的模拟实现
    NPM不想来回切换私有源
    Python学习笔记(十八)——Pandas进阶
    非零基础自学Java (老师:韩顺平) 第7章 面向对象编程(基础部分) 7.8 构造方法构造器
    【NSDictionary的概述 Objective-C语言】
    一起看 I/O | Flutter 3 更新详解
  • 原文地址:https://blog.csdn.net/qq_37699336/article/details/133189473