SpringBoot+Email发送邮件

news2024/11/20 14:23:48

引言

邮件通知是现代应用中常见的一种通信方式,特别是在需要及时反馈、告警或重要事件通知的场景下。Spring Boot提供了简单而强大的邮件发送功能,使得实现邮件通知变得轻而易举。本文将研究如何在Spring Boot中使用JavaMailSender实现邮件发送,以构建一个可靠的通知体系。

使用场景举例:

  1. 注册验证:在用户注册各种账户时,通过邮件发送验证码进行身份确认和账户激活。
  2. 网站营销:向潜在客户或已有用户发送营销信息或者广告邮件。
  3. 身份安全验证:在用户修改密码、解锁账户等关键操作时,通过邮件发送安全验证码来增强账户的安全性。
  4. 普通文本邮件、HTML内容板式邮件、包含静态资源邮件以及带附件邮件的发送:可以满足不同类型邮件的发送需求。

步骤一:引入邮件发送依赖

在Spring Boot项目的pom.xml文件中引入邮件发送所需的依赖:

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

步骤二:配置邮件发送参数

application.propertiesapplication.yml中配置邮件发送的相关参数,包括邮件服务器主机、端口、账户信息等:

spring:
  mail:
    host: smtp.163.com
    username: *****@163.com
    password: *****
    port: 25

步骤三:创建邮件发送服务

创建一个邮件发送的服务类,使用JavaMailSender进行邮件发送:

public interface SendMailService {
    public String sendSimpleMail(String address, String subject, String body);
    public String sendAttachmentMail(String address, String subject, String body, MultipartFile attach) throws MessagingException, IOException;
}
@Service
public class SendMailServiceImpl implements SendMailService {
    @Autowired
    private JavaMailSender javaMailSender;
    @Value("${spring.mail.username}")
    private String account;

    /**
     * @param address 收件地址
     * @param subject 标题
     * @param body    正文
     * @return
     */
    @Override
    public String sendSimpleMail(String address, String subject, String body) {
        SimpleMailMessage smm = new SimpleMailMessage();
        smm.setFrom(account);
        smm.setTo(address);
        smm.setSubject(subject);
        smm.setText(body);
        javaMailSender.send(smm);
        return "发送成功";
    }

    /**
     * @param address 收件地址
     * @param subject 标题
     * @param body    正文
     * @param attach  附件
     */
    @Override
    public String sendAttachmentMail(String address, String subject, String body, MultipartFile attach) throws MessagingException, IOException {
        MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
        mimeMessageHelper.setFrom(account);
        mimeMessageHelper.setTo(new String[]{address});
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(body);
        // 获取附件的文件名和后缀名
        String fileName = attach.getOriginalFilename();
        String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);
        // 读取附件内容
        byte[] bytes = attach.getBytes();
        // 创建一个新的资源对象来存储附件内容
        ByteArrayResource attachmentResource = new ByteArrayResource(bytes);
        // 添加附件,使用完整的文件名(包括后缀名)
        mimeMessageHelper.addAttachment(fileName, attachmentResource);
        javaMailSender.send(mimeMailMessage);
        return "发送成功";
    }
}

 步骤四:使用邮件发送服务

在需要发送邮件的地方,注入EmailService并调用相应的方法:

@RestController
public class EmailController {
    @Autowired
    private SendMailService sendMailService;
    @RequestMapping("/sendMail")
    public String sendMail(String address, String subject, String body) {
       return sendMailService.sendSimpleMail(address, subject, body);

    }
    @RequestMapping("/sendMailWithAttachment")
    public String sendMailWithAttachment(String address, String subject, String body, MultipartFile attach) throws IOException, MessagingException {
       return sendMailService.sendAttachmentMail(address, subject, body, attach);
    }
}

测试结果

 

结语

通过本文的介绍,你已经学到了如何在Spring Boot应用中使用JavaMailSender实现邮件发送功能。这个简单而强大的功能可以应用于各种场景,如用户注册、密码重置、异常通知等。通过配置邮件发送参数、创建邮件发送服务和使用邮件发送服务,你可以轻松构建一个可靠的邮件通知体系,为你的应用增加及时的通知和反馈机制。希望这篇博文能够帮助你成功实现Spring Boot中的邮件发送功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1402036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hypervisor 和Docker 还有Qemu有什么区别与联系?

Hypervisor Hypervisor是一种运行在基础物理服务器和操作系统之间的中间软件层&#xff0c;可以让多个操作系统和应用共享硬件资源&#xff0c;也叫做虚拟机监视器&#xff08;VMM&#xff09;。 Hypervisor有两种类型&#xff1a;Type I和Type II。 Type I 直接运行在硬件上&a…

如何用“VMware安装Ubuntu”win11系统?

一、 下载Ubuntu 企业开源和 Linux |Ubuntu的 二、 安装 三、 启动虚拟机 选中Try or Install Ubuntu Server&#xff0c;按回车

PY调包侠——Collections高效库

一、【写在前面】 PY是一个调包侠语言&#xff0c;多学一个库可以提高计算速度。Collections提供了各种数据类型和集合工具&#xff0c;可以很方便的处理各种数据结构。如果您有刷力扣的习惯&#xff0c;可以经常看到Collections和itertools的身影&#xff0c;经常用这两个可以…

阿里云 SAE 2.0 正式商用:极简易用、百毫秒弹性效率,降本 40%

作者&#xff1a;黛忻 本文主要介绍阿里云 Serverless 应用引擎&#xff08;以下简称 SAE &#xff09;如何帮助企业跨越技术鸿沟&#xff0c;从传统应用架构无感升级到 Serverless 架构&#xff0c;以更高效、更经济的方式进行转型&#xff0c;快速进入云原生快车道&#xff0…

牛客周赛 Round 29 解题报告 | 珂学家 | 博弈概率DP

前言 整体评价 F题真心好题&#xff0c;很典&#xff0c;学到了很多。D题用了对顶堆&#xff0c;写到一半就想到了更简单的方法&#xff0c;哭。E题是基于众数的构造。 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 A. 小红大战小紫 思路: 模拟 n, m list(map(…

Qt6入门教程 9:QWidget、QMainWindow和QDialog

目录 一.QWidget 1.窗口和控件 2.事件 二.QMainWindow 三.QDialog 1.模态对话框 1.1模态对话框 1.2.半模态对话框 2.非模态对话框 在用Qt Creator创建Qt Widgets项目时&#xff0c;会默认提供三种基类以供选择&#xff0c;它们分别是QWidget、QMainWIndow和QDialog&am…

ChatGPT五大教育潜能与四大教育风险

关于ChatGPT将对学校教育产生何种影响&#xff0c;教育界尚未达成共识。这在很大程度上反映了人们审视ChatGPT教育潜能时所采取的不同视角和立场。如果我们从前面提及的生态视角和学习者发展立场来看&#xff0c;ChatGPT可以与学习者之间建立协作、共生和进化的良性生态关系&am…

【Unity】AB包下载

【Unity】AB包下载 1.使用插件打AB包 a.AB包分类 一般地&#xff0c;将预制体作为AB包资源&#xff0c;不仅需要对预制体本身进行归类&#xff0c;还要对其涉及的动画&#xff08;AnimationClip&#xff09;、动画状态机&#xff08;AnimatorController&#xff09;、以及所…

7、机器学习中的数据泄露(Data Leakage)

找到并修复这个以微妙的方式破坏你的模型的问题。 数据泄露这个概念在kaggle算法竞赛中经常被提到,这个不同于我们通常说的生活中隐私数据暴露,而是在竞赛中经常出现某支队伍靠着对极个别feature的充分利用,立即将对手超越,成功霸占冠军位置,而且与第二名的差距远超第二名…

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07-1最优控制问题与性能指标

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-1最优控制问题与性能指标

基于OpenSSL的SSL/TLS加密套件全解析

概述 SSL/TLS握手时&#xff0c;客户端与服务端协商加密套件是很重要的一个步骤&#xff0c;协商出加密套件后才能继续完成后续的握手和加密通信。而现在SSL/TLS协议通信的实现&#xff0c;基本都是通过OpenSSL开源库&#xff0c;本文章就主要介绍下加密套件的含义以及如何在O…

机器人制作开源方案 | 全自动导航分拣机器人

作者&#xff1a;孙国峰 董阳 张鑫源 单位&#xff1a;山东科技大学 机械电子工程学院 指导老师&#xff1a;张永超 贝广霞 1. 研究意义 1.1 研究背景 在工业生产中&#xff0c;机器人在解决企业的劳动力不足&#xff0c;提高企业劳动生产率&#xff0c;提高产品质量和降低…

【设计模式】适配器和桥接器模式有什么区别?

今天我探讨一下适配器模式和桥接模式&#xff0c;这两种模式往往容易被混淆&#xff0c;我们希望通过比较他们的区别和联系&#xff0c;能够让大家有更清晰的认识。 适配器模式&#xff1a;连接不兼容接口 当你有一个类的接口不兼容你的系统&#xff0c;而你又不希望修改这个…

【笔记】Blender4.0建模入门-3物体的基本操作

Blender入门 ——邵发 3.1 物体的移动 演示&#xff1a; 1、选中一个物体 2、选中移动工具 3、移动 - 沿坐标轴移动 - 在坐标平面内移动 - 自由移动&#xff08;不好控制&#xff09; 选中物体&#xff1a;右上的大纲窗口&#xff0c;点击物体名称&#xff0c;物体的轮…

【Python 元编程】装饰器入门指南

Python装饰器入门指南&#x1f680; 在编程世界中&#xff0c;效率和优雅的代码往往是我们所追求的目标。Python 作为一种强大且灵活的编程语言&#xff0c;提供了一个称为“装饰器”的功能&#xff0c;让我们能够以一种简洁和优雅的方式扩展和管理我们的代码。 本文旨在为初…

利用appium自动控制移动设备并提取数据

安装appium-python-client模块并启动已安装好的环境 安装appium-python-client模块 在window的虚拟环境下执行pip install appium-python-client 启动夜神模拟器&#xff0c;进入夜神模拟器所在的安装路径的bin目录下&#xff0c;进入cmd终端&#xff0c;使用adb命令建立adb…

生产环境 OpenFeign 的配置最佳实践

基础使用 OpenFeign 全方位讲解 1. 生产环境 OpenFeign 的配置事项 1.1 如何更改 OpenFeign 默认的负载均衡策略 warehouse-service: #服务提供者的微服务IDribbon:#设置对应的负载均衡类NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule1.2 开启默认的 O…

C++ //练习 2.14 下面的程序合法吗?如果合法,它将输出什么?

C Primer&#xff08;第5版&#xff09; 练习 2.14 练习 2.14 下面的程序合法吗&#xff1f;如果合法&#xff0c;它将输出什么&#xff1f; int i 100, sum 0; for(int i 0; i ! 10; i)sum i; std::cout<<i<<" "<<sum<<std::endl;环境…

scipy通过快速傅里叶变换实现滤波

文章目录 fft模块简介fft函数示例滤波 fft模块简介 scipy官网宣称&#xff0c;fftpack模块将不再更新&#xff0c;或许不久之后将被废弃&#xff0c;也就是说fft将是唯一的傅里叶变换模块。 Fourier变换极其逆变换在数学上的定义如下 F ( ω ) ∫ − ∞ ∞ f ( t ) e − i ω…

Python图像处理【19】基于霍夫变换的目标检测

基于霍夫变换的目标检测 0. 前言1. 使用圆形霍夫变换统计图像中圆形对象2. 使用渐进概率霍夫变换检测直线2.1 渐进霍夫变换原理2.2 直线检测 3. 使用广义霍夫变换检测任意形状的对象3.1 广义霍夫变换原理3.2 检测自定义形状 小结系列链接 0. 前言 霍夫变换 (Hough Transform,…