首页 > 其他分享 >干货,某大厂小姐姐深夜让我说出了秘密-springboot发邮件

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

时间:2023-09-22 23:35:53浏览次数:47  
标签:发邮件 小姐姐 springboot springframework mail import message 邮件 String

后端依赖

    <!--引入mail依赖-->
    <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>
    <!--验证码-->
    <dependency>
      <groupId>com.github.whvcse</groupId>
      <artifactId>easy-captcha</artifactId>
      <version>1.6.2</version>
    </dependency>

后端配置文件application.yml

spring:
  # 关闭thymeleaf缓存
  thymeleaf:
    cache: false
  mail:
    host: smtp.163.com
    username: 你的邮箱
    password: 你的邮箱授权码(163邮箱->设置->开启pop3smtp->获取授权码)
    default-encoding: UTF-8
    protocol: smtp
    properties:
      mail:
        smtp:
          auth: true # 启用SMTP认证
          starttls:
            enabled: true # 启用SMTP认证
            required: true # 必须采用加密链接

后端工具类

package com.test.empback.utils;

import java.io.File;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.mail.internet.MimeMessage;


@Component("mailUtils")
@Slf4j
public class MailUtils {
    @Autowired
    private MailProperties mailProperties;
    @Autowired
    private JavaMailSender mailSender;
    // 发送简单邮件

    public void sendSimpleMall(String to, String subject, String content) {
        try {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(mailProperties.getUsername());
            message.setTo(to);
            message.setCc(mailProperties.getUsername());
            message.setSubject(subject);
            message.setText(content);

            mailSender.send(message);
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }

    // 发送带附件的邮件

    public void sendAttachFileMail(String to, String subject, String content, File file) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
            //邮件发送人
            messageHelper.setFrom(mailProperties.getUsername());
            //邮件接收人
            messageHelper.setTo(to);
            //邮件主题
            message.setSubject(subject);
            //邮件内容
            messageHelper.setText(content);
            //添加附件
            messageHelper.addAttachment(file.getName(), file);
            //发送
            mailSender.send(message);

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

    // 发送HTML格式文件

    public void sendHtmlMail(String to, String subject, String content) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
            //邮件发送人
            messageHelper.setFrom(mailProperties.getUsername());
            //邮件接收人
            messageHelper.setTo(to);
            //邮件主题
            message.setSubject(subject);
            //邮件内容
            messageHelper.setText(content, true);
            //发送
            mailSender.send(message);

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

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

文件名:mailtemplate.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <title>邮箱验证</title>
    <meta charset="utf-8">
</head>

<body>
<!-- 头部 -->
<div style="padding: 10px; background-color: #393D49;">
    <h2 style="color: #FFFFFF; margin: 0px;">人事招聘系统</h2>
</div>
<!-- 内容 -->
<div style="padding-top: 10px; padding-bottom: 10px;">
    <div style="background-color: snow; padding: 20px;">
        <div>
            <h3>尊敬的用户:您好!</h3>
            <p>说明:您现在正在进行敏感操作,为了确保您的账户安全,我们将通过邮件对您进行身份验证。</p>
            <p th:text="${message}"></p>
            <div>
                <h4>本次的验证码为:</h4>
                <div style="background-color: #EBEEF5; padding: 10px;">
                    <h3 th:text="${code}"></h3>
                </div>
                <h4>有效期为1分钟</h4>
            </div>
            <p style="margin-top: 15px;">发件人:人事招聘管理系统</p>
        </div>
    </div>
</div>
<!-- 页底 -->
<div style="padding: 10px; text-align: center; background-color: #2F4056;">
    <p style="margin: 0px; color: #FFFFFF;">Copyright © 2020 <a href="http://localhost:8080/" style="color: #FFFFFF;">人事招聘系统</a> All Rights Reserved.</p>
</div>

</body>

</html>

控制器发送邮件

public void sendCode(String userName,String email) {
        try {
            // 随机生成验证码
            SpecCaptcha captcha = new SpecCaptcha(10, 10, 4);
            captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);
            // 存入键值对并设置过期时间(1分钟内有效)
            redisUtil.set(CommonConstant.PREFIX_PASSFIND_CODE+userName,captcha.text(),CommonConstant.PASSFIND_CODE_EXPIRE_TIME);

            String message = "详情:您正在尝试进行找回密码操作,若非是您本人的行为,请忽略!";
            // 设置邮件内容
            Context context = new Context();
            context.setVariable("message", message);
            context.setVariable("code", captcha.text());
            String mail = templateEngine.process("mailtemplate.html", context);
            // 发送邮件
            mailUtils.sendHtmlMail(email, "邮箱验证码", mail);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

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

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

标签:发邮件,小姐姐,springboot,springframework,mail,import,message,邮件,String
From: https://blog.51cto.com/u_13794952/7572929

相关文章

  • SpringBoot中内置Servlet容器原理
    本篇博客会梳理一下SpringBoot内置Servlet容器的原理:原理其实跟SpringBoot中的内置Tomcat的启动原理差不多,我们从整个源码进行梳理一下。我们会发现当我们从Spring,SpringMVC演化到SpringBoot后发现采用SpringBoot后不需要配置Tomcat服务器了,这是什么原因呐,我们启动整个SpringBo......
  • SpringBoot疫苗在线预约接种系统
    SpringBoot疫苗在线预约接种系统系统功能首页:图片轮播宣传疫苗列表在线预约疫苗新闻资讯新闻详情登录注册留言板个人中心我的预约后台管理:登录新闻管理留言板管理回复管理预约管理用户管理疫苗库管理系统管理用户管理角色管理日志管理操作日志登录日志......
  • springboot 的 properties 文件之间的联系
    application.properties为全局配置文件,默认加载这里的内容application-dev.properties为开发配置文件,会覆盖全局配置文件内容application-test.properties为测试配置文件,会覆盖全局配置文件application-prod.properties为线上配置文件,同上同样yaml与properties的相......
  • springBoot 启动报错: If you want an embedded database (H2, HSQL or Derby), please
    原因其实这个异常在SpringBoot中是一个比较常见的异常,一般是因为SpringBoot自动配置时,检测到我们添加了MySQL、Oracle、Mybatis等和数据库相关的依赖包,结果我们的配置文件中却没有添加数据库相关的配置,比如:spring:datasource:driver-class-name:com.mysql.jdbc.Driver......
  • Springboot 的 maven项目利用 maven插件构建 docker 镜像(免 DockerFile编写)
    Springboot的maven项目利用maven插件构建docker镜像(免DockerFile编写)本小节目的是springboot项目maven插件构建容器实验步骤:1.本地创建springboot项目,写业务逻辑代码2.提交代码到远程git仓库3.在linux环境拉取远程git仓库代码,构建镜像4.把构建完成的镜像推送......
  • Spring,SpringMVC,SpringBoot,SpringCloud有什么区别?
    简单介绍Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring使你能够编写更干净、更可管理、并且更易于测试的代码。SpringMVC是Spring的一个模块,一个web框架。通过DispatcherServlet,ModelAndView和ViewResolver,开发web应用变得很容易。主要针对的是网站......
  • SpringBoot2集成RabbitMQ(注解+回调)
    一、概述RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中......
  • 群发邮件如何避免进垃圾箱
    邮件群发是一种常见的营销手段,可以帮助企业向大量目标群体发送营销信息,因此邮件群发被广泛应用于促销活动、产品推广、新闻发布、客户维护等场景。然而随着垃圾邮件的泛滥,国内外大部分的电子邮件服务商都采取了越来越严厉的垃圾邮件过滤机制,通过敏感字符,邮件内容,附件,超链接,发送频率......
  • Springboot 全局日期时间格式处理
    From: https://www.cnblogs.com/Baker-Street/p/16156297.html大家伙在日常开发中可能都遇到过,前端传递的时间字符串,后台如果用日期接收(Date或者jdk8的Local日期)接收,经mvc接收后就报错了,先解析原因:1.get请求和post表单请求中如果含有时间字符串,则spring底层是用的Par......
  • 【精品】SpringBoot统一日期类型处理
    From: https://blog.csdn.net/lianghecai52171314/article/details/127106664方案一:给日期字段添加注解/***创建时间*///返回时间类型@JsonFormat(pattern=GlobalConst.DATETIME_PATTERN,timezone="GMT+8")//接收时间类型@DateTimeFormat(pattern=GlobalConst.DATETIM......