当前位置: 首页 > news >正文

【java深入学习第7章】用 Spring Boot 和 Java Mail 轻松实现邮件发送功能

引言

在现代的企业应用中,邮件发送是一个非常常见的功能。无论是用户注册后的验证邮件,还是系统通知邮件,邮件服务都扮演着重要的角色。本文将介绍如何在Spring Boot项目中整合Java Mail,实现发送邮件的功能。

一、准备工作

在开始之前,我们需要准备以下内容:

  • 一个Spring Boot项目
  • 一个可用的SMTP邮件服务器(如Gmail、QQ邮箱等)

二、添加依赖

首先,在pom.xml中添加Spring Boot Starter Mail依赖:

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

三、配置邮件服务器

application.propertiesapplication.yml中配置邮件服务器信息。以下是使用Gmail SMTP服务器的示例配置:

application.properties

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=your-email@gmail.com
spring.mail.password=your-email-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

application.yml

spring:mail:host: smtp.gmail.comport: 587username: your-email@gmail.compassword: your-email-passwordproperties:mail:smtp:auth: truestarttls:enable: true

四、编写邮件发送服务

创建一个MailService类,用于封装邮件发送的逻辑:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;@Service
public class MailService {@Autowiredprivate JavaMailSender mailSender;public void sendSimpleMail(String to, String subject, String content) {SimpleMailMessage message = new SimpleMailMessage();message.setFrom("your-email@gmail.com");message.setTo(to);message.setSubject(subject);message.setText(content);mailSender.send(message);}
}

五、编写控制器

创建一个控制器MailController,提供一个发送邮件的接口:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MailController {@Autowiredprivate MailService mailService;@GetMapping("/sendMail")public String sendMail(@RequestParam String to, @RequestParam String subject, @RequestParam String content) {mailService.sendSimpleMail(to, subject, content);return "Mail sent successfully";}
}

六、测试邮件发送功能

启动Spring Boot应用,访问以下URL测试邮件发送功能:

http://localhost:8080/sendMail?to=recipient-email@gmail.com&subject=Test&content=This is a test email.

如果配置正确并且邮件服务器可用,你应该会收到一封测试邮件。

七、发送HTML邮件

除了发送简单文本邮件,Java Mail还支持发送HTML格式的邮件。我们可以在MailService中添加一个方法来发送HTML邮件:

import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;public void sendHtmlMail(String to, String subject, String content) throws MessagingException {MimeMessage message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom("your-email@gmail.com");helper.setTo(to);helper.setSubject(subject);helper.setText(content, true);mailSender.send(message);
}

八、总结

通过本文的介绍,我们了解了如何在Spring Boot项目中整合Java Mail,实现发送邮件的功能。无论是简单的文本邮件,还是复杂的HTML邮件,Java Mail都能轻松应对。希望本文对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言。

百万大学生都在用的AI写论文工具,篇篇无重复👉:AI写论文

相关文章:

【java深入学习第7章】用 Spring Boot 和 Java Mail 轻松实现邮件发送功能

引言 在现代的企业应用中&#xff0c;邮件发送是一个非常常见的功能。无论是用户注册后的验证邮件&#xff0c;还是系统通知邮件&#xff0c;邮件服务都扮演着重要的角色。本文将介绍如何在Spring Boot项目中整合Java Mail&#xff0c;实现发送邮件的功能。 一、准备工作 在…...

Linux抽象套接字

在UNIX和类UNIX系统中,socket编程提供了一种机制,允许进程之间进行通信。其中,UNIX域套接字(UNIX domain socket)是一种特殊的套接字,用于同一台机器上的进程间通信(IPC)。UNIX域套接字可以使用两种类型的地址:路径名套接字(pathname socket)和抽象套接字(abstract…...

GA-Kmeans-Transformer-GRU时序聚类+状态识别组合模型,创新发文无忧!

GA-Kmeans-Transformer-GRU时序聚类状态识别组合模型&#xff0c;创新发文无忧&#xff01; 目录 GA-Kmeans-Transformer-GRU时序聚类状态识别组合模型&#xff0c;创新发文无忧&#xff01;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.GA-Kmeans-Transformer-GRU时…...

Python面试全攻略:基础知识、特性、算法与实战解析

随着Python的普及&#xff0c;越来越多的人开始学习Python并尝试在面试中展示自己的技能。在这篇文章中&#xff0c;我们将探讨Python面试需要注意的问题以及一些经典的Python算法。 一、Python面试需要注意的问题 基础知识 在Python面试中&#xff0c;基础知识是非常重要的。…...

Linux网络编程-socket套接字使用详解

1.概念 在Linux中&#xff0c;套接字&#xff08;socket&#xff09;是一种通信机制&#xff0c;用于实现不同进程之间或同一主机上的不同线程之间的数据交换。它是网络编程的基础&#xff0c;允许应用程序通过网络进行通信&#xff0c;也可以在同一台机器上的不同进程间进行通…...

Leetcode 236. 二叉树的最近公共祖先

142. 环形链表 II 问题描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&am…...

GPT-4从0到1搭建一个Agent简介

GPT-4从0到1搭建一个Agent简介 1. 引言 在人工智能领域&#xff0c;Agent是一种能够感知环境并采取行动以实现特定目标的系统。本文将简单介绍如何基于GPT-4搭建一个Agent。 2. Agent的基本原理 Agent的核心是感知-行动循环&#xff08;Perception-Action Loop&#xff09;…...

docker镜像源配置

docker默认的镜像源&#xff0c;走的是国外网络&#xff0c;下载速度感人&#xff0c;修改镜像源&#xff0c;进入/etc/docker/ cd /etc/docker 编辑文件daemon.json(没有就直接创建)&#xff0c;内容&#xff1a; {"registry-mirrors": ["https://q7ta64ip.…...

解读InnoDB数据库索引页与数据行的紧密关联

目录 一、快速走进索引页结构 &#xff08;一&#xff09;整体展示说明 &#xff08;二&#xff09;内容说明 File Header&#xff08;文件头部&#xff09; Page Header&#xff08;页面头部&#xff09; Infimum Supremum&#xff08;最小记录和最大记录&#xff09; …...

以数据编织,重构数据管理新范式

大数据产业创新服务媒体 ——聚焦数据 改变商业 人工智能几乎统一了全球最顶尖科技公司的认知&#xff1a;这个时代&#xff0c;除了AI&#xff0c;没有第二条路可走。 人工智能的技术逻辑颇有一种“暴力美学”&#xff0c;它依托于海量大数据和超高算力的训练和推理&#xff…...

在linux x86服务器安装jdk

安装JDK&#xff08;Java Development Kit&#xff09;在Linux x86 服务器上可以按照以下步骤进行操作。以下步骤假设你有root权限或者sudo权限。 1. 下载JDK安装包 首先&#xff0c;你需要从Oracle官网或者OpenJDK官网下载JDK的安装包。可以选择对应的版本&#xff0c;比如J…...

2024智慧竞技游戏俱乐部线下面临倒闭?

在2024年的中国&#xff0c;智慧竞技游戏俱乐部如雨后春笋般在二三线城市中兴起&#xff0c;它们不仅是年轻人娱乐的场所&#xff0c;更是智慧与技巧的较量场。然而&#xff0c;随着疫情的冲击&#xff0c;这些俱乐部面临着前所未有的挑战。本文将通过一个小镇上的故事&#xf…...

jmeter分布式(四)

一、gui jmeter的gui主要用来调试脚本 1、先gui创建脚本 先做一个脚本 演示&#xff1a;如何做混合场景的脚本&#xff1f; 用211的业务比例 ①启动数据库服务 数据库服务&#xff1a;包括mysql、redis mysql端口默认3306 netstat -lntp | grep 3306处于监听状态&#xf…...

如何解决手机游戏因IP代理被封禁无法正常游戏的问题?

在当前的网络环境下&#xff0c;许多手机游戏为了维护游戏的公平性和安全性&#xff0c;会采取措施对使用IP代理的玩家进行封禁&#xff0c;导致他们无法正常访问游戏。这种情况对于一些需要使用IP代理的用户来说可能显得很棘手&#xff0c;但实际上有几种技术性的解决方案可以…...

windows10 安装Anaconda

文章目录 1. 下载2. 安装3. 配置环境变量4. 检查是否安装成功 1. 下载 官网下载 https://www.anaconda.com/download 下载的最新版本&#xff0c;要求python的版本也高一些 清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 所有版本在这个网…...

[图解]SysML和EA建模住宅安全系统-14-黑盒系统规约

1 00:00:02,320 --> 00:00:07,610 接下来&#xff0c;我们看下一步指定黑盒系统需求 2 00:00:08,790 --> 00:00:10,490 就是说&#xff0c;把这个系统 3 00:00:11,880 --> 00:00:15,810 我们的目标系统&#xff0c;ESS&#xff0c;看成黑盒 4 00:00:18,030 --> …...

frp内网穿透xtcp安全点对点p2p部署记录打洞失败解决方法

环境 一、有公网IP、nas主机&#xff08;需要穿透里面的服务&#xff09;、安卓手机、frps-0.58.1、frpc-0.59.0(群晖NAS套件)、安卓版frpc-0.56.0 二、两端frpc必须要有一端nat网络类型不是非对称nat 开始 有公网的主机上配置frps.toml bindPort 7000nas主机端frpc.toml配…...

C++基础篇(2)

目录 前言 1.缺省参数 2.函数重载 2.1函数重载的基本规则 ​编辑2.2注意事项 2.3 重载解析&#xff08;Overload Resolution&#xff09;--补充内容 3.引用 3.1引用的概念和定义 3.2引用的特性 3.3引用的使用 3.4const引用 4.指针和引用的关系 结束语 前言 上节小编…...

c++ primer plus 第16章string 类和标准模板库,16.1.3 使用字符串

c primer plus 第16章string 类和标准模板库,16.1.3 使用字符串 c primer plus 第16章string 类和标准模板库,16.1.3 使用字符串 文章目录 c primer plus 第16章string 类和标准模板库,16.1.3 使用字符串16.1.3 使用字符串程序清单16.3 hangman.cpp 16.1.3 使用字符串 现在&a…...

使用mybatis的statementHander拦截器监控表和字段并发送钉钉消息

新建mybatis的statementHander拦截器拦截器 类 面试题&#xff1a; 2.实现 解析Sql时引入JSqlParser JSqlParser 是一个 SQL 语句解析器。 它将 SQL转换为可遍历的 Java 类层次结构。 <dependency><groupId>com.github.jsqlparser</groupId><artifac…...

使用cv_unet_image-colorization增强电商商品图像的实践

使用cv_unet_image-colorization增强电商商品图像的实践 电商平台中&#xff0c;商品图像的质量直接影响消费者的购买决策。本文将分享如何利用cv_unet_image-colorization模型&#xff0c;为老商品图上色、提升低质图像质量&#xff0c;从而显著改善商品展示效果。 1. 电商图像…...

3步解锁BiliBiliCCSubtitle:让内容创作者的字幕处理效率提升80%

3步解锁BiliBiliCCSubtitle&#xff1a;让内容创作者的字幕处理效率提升80% 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 一、价值定位&#xff1a;为什么传统字…...

WarcraftHelper终极指南:轻松解决《魔兽争霸III》宽屏适配与性能优化问题

WarcraftHelper终极指南&#xff1a;轻松解决《魔兽争霸III》宽屏适配与性能优化问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸…...

终极B站视频下载指南:使用BBDown快速获取高清资源

终极B站视频下载指南&#xff1a;使用BBDown快速获取高清资源 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown是一款强大的命令行式B站视频下载工具&#xff0c;让你轻松保存哔哩…...

【Flutter for OpenHarmony 】三方库 infinite_scroll_pagination 鸿蒙化适配实战:列表分页加载全指南

&#x1f4f1; Flutter for OpenHarmony 三方库 infinite_scroll_pagination 鸿蒙化适配实战&#xff1a;列表分页加载全指南 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net 哈喽大家好呀&#xff5e;我是一名正在学习Flutter跨平台开发…...

KeyboardChatterBlocker:如何解决机械键盘的“幽灵按键“问题?

KeyboardChatterBlocker&#xff1a;如何解决机械键盘的"幽灵按键"问题&#xff1f; 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocke…...

WarcraftHelper完全指南:从显示异常到性能飞跃的5个关键突破

WarcraftHelper完全指南&#xff1a;从显示异常到性能飞跃的5个关键突破 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 诊断宽屏适配问题 在34英寸2…...

项目介绍 MATLAB实现基于PSO-Q-learning 粒子群优化算法(PSO)结合Q学习算法(Q-learning)进行无人机三维路径规划(含模型描述及部分示例代码) 还请多多点一下关注 加油

MATLAB实现基于PSO-Q-learning 粒子群优化算法&#xff08;PSO&#xff09;结合Q学习算法&#xff08;Q-learning&#xff09;进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面&#xff08;含完整的程序&…...

TRAE SOLO模式实战:如何用AI上下文工程师5分钟搞定JWT登录接口开发

TRAE SOLO模式实战&#xff1a;5分钟构建JWT登录接口的AI开发革命 清晨的阳光透过百叶窗洒在键盘上&#xff0c;咖啡杯里升起最后一缕热气。作为一名全栈开发者&#xff0c;你刚收到产品经理的紧急需求&#xff1a;"今天下班前上线用户登录功能&#xff0c;支持邮箱密码验…...

RCS 核心系统架构:AGV 调度“大脑”的底层逻辑

在现代智能物流与制造系统中&#xff0c;RCS&#xff08;Robot Control System&#xff09;作为 AGV 集群的核心调度中枢&#xff0c;扮演着"智慧大脑"的关键角色。不同于单台 AGV 的自主导航&#xff0c;RCS 需要解决多车协同、任务分配、路径规划与冲突避免等复杂问…...