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

Spring Boot发送邮件

在现代的互联网应用中,发送电子邮件是一项常见的功能需求。Spring Boot提供了简单且强大的邮件发送功能,使得在应用中集成邮件发送变得非常容易。本文将介绍如何在Spring Boot中发送电子邮件,并提供一个完整的示例。

1. 准备工作

在开始之前,我们需要确保已经配置好了以下两项准备工作:

  1. 一个有效的邮件服务器及其连接信息,包括SMTP主机名、端口号、用户名和密码。你可以使用自己的邮件服务器或者使用第三方邮件服务提供商(如Gmail、SendGrid等)。
  2. 一个已经搭建好的Spring Boot项目。你可以使用Spring Initializr(https://start.spring.io/)来快速创建一个新的Spring Boot项目,确保项目中包含所需的基本依赖。

2. 添加依赖

首先,在你的Spring Boot项目的pom.xml文件中添加以下Maven依赖:

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

这将在你的项目中引入Spring Boot的邮件发送功能所需的所有依赖。

3. 配置邮件服务器信息

接下来,我们需要在Spring Boot的配置文件中配置邮件服务器的连接信息。在application.properties(或application.yml)文件中添加以下属性:

spring.mail.host=your_smtp_host
spring.mail.port=your_smtp_port
spring.mail.username=your_username
spring.mail.password=your_password
spring.mail.properties.mail.smtp.auth=true

确保将上述属性值替换为你实际的邮件服务器连接信息。

4. 创建邮件发送服务

现在,我们可以创建一个邮件发送服务类,该类将使用Spring Boot提供的JavaMailSender来发送邮件。在你的项目中创建一个名为EmailService的新类,并在其中添加以下代码:

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 EmailService {private JavaMailSender javaMailSender;@Autowiredpublic EmailService(JavaMailSender javaMailSender) {this.javaMailSender = javaMailSender;}public void sendEmail(String to, String subject, String text) {SimpleMailMessage message = new SimpleMailMessage();message.setTo(to);message.setSubject(subject);message.setText(text);javaMailSender.send(message);}
}

在上述代码中,我们使用JavaMailSender来创建一个邮件消息对象SimpleMailMessage,并设置收件人、主题和内容。最后,我们通过调用javaMailSender.send(message)来发送邮件。

5. 使用邮件发送服务

现在,我们可以在需要发送邮件的地方使用EmailService。例如,在一个Spring Boot的控制器中,你可以注入EmailService并调用其sendEmail方法来发送邮件。以下是一个示例:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class EmailController {private EmailService emailService;@Autowiredpublic EmailController(EmailService emailService) {this.emailService = emailService;}@GetMapping("/sendEmail")public String sendEmail() {String to = "recipient@example.com";String subject = "Test Email";String text = "This is a test email.";emailService.sendEmail(to, subject, text);return "Email sent successfully.";}
}

在上述示例中,我们创建了一个EmailController控制器,并注入了EmailService。在sendEmail方法中,我们指定了收件人地址、邮件主题和内容,并调用emailService.sendEmail方法发送邮件。

6. 运行测试

现在,你可以启动你的Spring Boot应用程序,并向/sendEmail端点发出GET请求来测试邮件发送功能。如果一切正常,你应该会在日志输出中看到邮件发送成功的消息。

注意:在测试邮件发送功能时,请确保邮件服务器的连接信息和收件人地址是正确的,以避免错误发送邮件。

7. 常见错误

7.1 553 Mail from must equal authorized user

553 Mail from must equal authorized user  
com.sun.mail.smtp.SMTPSendFailedException: 553 Mail from must equal authorized user  at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1333)  at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906)  at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:535)  at com.you.mail.model.SendMessage.sendMessage(SendMessage.java:71)  at com.you.mail.model.SendMessage.main(SendMessage.java:89)  Exception in thread "main" com.sun.mail.smtp.SMTPSendFailedException: 553 Mail from must equal authorized user  at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1333)  at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906)  at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:535)  at com.you.mail.model.SendMessage.sendMessage(SendMessage.java:71)  at com.you.mail.model.SendMessage.main(SendMessage.java:89)  

网上看到的结果是增加属性,但我这边测试没通过

spring:boot:admin:notify:mail:from: ${spring.mail.username}

后面增加了个传参解决的,要和username的值一样才行

    public void sendEmail(String to, String subject, String text) {SimpleMailMessage message = new SimpleMailMessage();message.setTo(to);message.setSubject(subject);message.setText(text);message.setForm("your_username");javaMailSender.send(message);}

7.2 SmtpClientAuthentication is disabled for the Tenant.

SmtpClientAuthentication is disabled for the Tenant. Visit https://aka.ms/smtp_auth_disabled for more information.

我这边用的是office365的邮箱,这边需要管理员开通相关的第三方客户端发送smtp的权限.

总结

本文介绍了如何在Spring Boot中发送电子邮件。我们首先准备了所需的工作,包括配置邮件服务器信息和创建Spring Boot项目。然后,我们添加了所需的Maven依赖项,并创建了一个邮件发送服务类。最后,我们在控制器中使用邮件发送服务来发送邮件,并进行了功能测试。

Spring Boot使得在应用中集成邮件发送变得非常简单,开发人员只需几行代码就能实现这一功能。希望本文对你理解和使用Spring Boot发送邮件有所帮助!

相关文章:

Spring Boot发送邮件

在现代的互联网应用中&#xff0c;发送电子邮件是一项常见的功能需求。Spring Boot提供了简单且强大的邮件发送功能&#xff0c;使得在应用中集成邮件发送变得非常容易。本文将介绍如何在Spring Boot中发送电子邮件&#xff0c;并提供一个完整的示例。 1. 准备工作 在开始之前…...

智慧矿山:AI算法助力!刮板机监测,生产效率和安全性提升!

工作面刮板机在煤矿等采矿场景中起着重要作用。为了提高其生产效率和安全性&#xff0c;研究人员开发了一种基于 AI 算法的刮板机监测技术。 在传统的刮板机监测中&#xff0c;通常需要人工观察和判断刮板机的状态。这种方法存在许多问题&#xff0c;如主观性、耗时和易出错等。…...

Qt跨平台(统信UOS)各种坑解决办法

记录Qt跨平台的坑&#xff0c;方便日后翻阅。 一、环境安装 本人用的是qt 5.14.2.直接在官网下载即可。地址&#xff1a;Index of /archive/qt/5.14/5.14.2 下载linux版本。 下载之后 添加可执行权限。 chmod 777 qt-opensource-linux-x64-5.14.2.run 然后执行。 出现坑1…...

ORB-SLAM3算法1之Ubuntu18.04+ROS-melodic安装ORB-SLAM3及各种问题解决

文章目录 0 引言1 安装依赖1.1 opencv安装1.2 Eigen3安装1.3 Pangolin安装1.4 其他2 编译安装ORB-SLAM32.1 build.sh2.2 build_ros.sh0 引言 ORB-SLAM3,在之前ORB-SLAM和ORB-SLAM2的基础上,新增了IMU多传感器融合SLAM,这是第一个能够使用针孔和鱼眼镜头模型通过单目、立体和…...

git学习笔记之用命令行解决冲突

背景 一般来说&#xff0c;当使用git检测到源分支和目标分支发生冲突时&#xff0c;我们习惯用IDE在本地进行冲突的解决&#xff0c;再合并、push。 但如果冲突文件不多&#xff0c;我们大可以直接用命令行去解决冲突。 方法 第一种方法&#xff1a; 找到所有的>>>…...

C语言中的内联汇编是什么?如何使用内联汇编进行底层编程?

C语言中的内联汇编是一种高级编程技术&#xff0c;允许开发者在C代码中嵌入汇编代码&#xff0c;以实现对特定处理器指令的直接控制和优化。内联汇编通常用于底层编程&#xff0c;例如操作系统开发、嵌入式系统编程和性能关键的应用程序。本文将详细介绍内联汇编的概念、语法和…...

react笔记基础部分(组件生命周期路由)

注意点&#xff1a; class是一个关键字&#xff0c; 类。 所以react 写class, 用classname &#xff0c;会自动编译替换class 点击方法&#xff1a; <button onClick {this.sendData}>给父元素传值</button>常用的插件&#xff1a; 需要引入才能使用的&#xf…...

Sentinel授权规则和规则持久化

大家好我是苏麟 , 今天说说Sentinel规则持久化. 授权规则 授权规则可以对请求方来源做判断和控制。 授权规则 基本规则 授权规则可以对调用方的来源做控制&#xff0c;有白名单和黑名单两种方式。 白名单&#xff1a;来源&#xff08;origin&#xff09;在白名单内的调用…...

JVM(三) 垃圾回收

一、自动垃圾回收 1.1 C/C++的内存管理 在C/C++这类没有自动垃圾回收机制的语言中,一个对象如果不再使用,需要手动释放,否则就会出现内存泄漏。我们称这种释放对象的过程为垃圾回收,而需要程序员编写代码进行回收的方式为手动回收。 内存泄漏指的是不再使用的对象在系统中…...

vue3中使用svg并封装成组件

打包svg地图 安装插件 yarn add vite-plugin-svg-icons -D # or npm i vite-plugin-svg-icons -D # or pnpm install vite-plugin-svg-icons -D使用插件 vite.config.ts import { VantResolver } from unplugin-vue-components/resolvers import { createSvgIconsPlugin } from…...

实验六:DHCP、DNS、Apache、FTP服务器的安装和配置

1. (其它) 掌握Linux下DHCP、DNS、Apache、FTP服务器的安装和配置&#xff0c;在Linux服务器上部署JavaWeb应用 完成单元八的实训内容。 1、安装 JDK 2、安装 MySQL 3、部署JavaWeb应用 安装jdk 教程连接&#xff1a;linux安装jdk8详细步骤-CSDN博客 Jdk来源&#xff1a;linu…...

Python实验项目4 :面对对象程序设计

1&#xff1a;运行下面的程序&#xff0c;回答问题。 &#xff08;1&#xff09;说明程序的执行过程&#xff1b; &#xff08;2&#xff09;程序运行结果是什么&#xff1f; # &#xff08;1&#xff09;说明程序的执行过程&#xff1b; # &#xff08;2&#xff09;程序运行…...

用html、css和jQuery实现图片翻页的特效

在当今的web设计中&#xff0c;图片翻页特效是一种常见而且受欢迎的技术。通过图片的切换与过渡效果&#xff0c;能够使网页更具动感和吸引力。下面写一个简单的示例&#xff0c;来介绍一下如何使用html、css和jQuery实现图片翻页特效。 1&#xff0c;html结构 首先&#xff…...

awk 框架

参考自&#xff1a;https://zhuanlan.zhihu.com/p/627048291?utm_id0语法&#xff0c;由几部分组成 awk [options] script varvalue file(s) awk [options] -f scriptfile varvalue file(s)语法中的script部分&#xff0c;由两部分组成 模式操作 其中一个模式&#xff1a;B…...

专业135总分400+西安交通大学信息与通信工程学院909/815考研经验分享

今年初试发挥不错&#xff0c;400&#xff0c;专业课135&#xff0c;将近一年复习一路走来&#xff0c;感慨很多&#xff0c;希望以下经历可以给后来的同学提供一些参考。 初试备考经验 公共课&#xff1a;三门公共课&#xff0c;政治&#xff0c;英语&#xff0c;数学。在备考…...

在 Windows 用 Chrome System Settings 设置代理

在 Windows 用 Chrome System Settings 设置代理 贴心提示&#xff1a;在设置代理之前&#xff0c;请确保您已经安装了 浏览器。 &#x1f527; 设置代理的详细步骤如下&#xff1a; 打开 浏览器&#xff0c;输入 //settings/system 并回车。 在「系统和网络设置」页面中&am…...

Excel多线程导入数据库

文章目录 Excel多线程导入数据库1. CountDownLatch2.多线程导入数据库 Excel多线程导入数据库 书接上文 Excel20w数据5s导入 1. CountDownLatch CountDownLatch 维护了一个计数器&#xff0c;初始值为指定的数量。当一个或多个线程调用 await() 方法时&#xff0c;它们会被阻…...

Linux开机默认进入命令行或图形化模式

开机默认进入命令行 sudo systemctl set - default multi-user.target 执行上面命令后重新启动 reboot开机默认进入图形化界面 sudo systemctl set - default graphical.target 执行上面命令后重新启动 reboot或者 先进入root之后 su 在执行 systemctl set - default …...

ajax请求的时候get 和post方式的区别?

在 AJAX 请求中&#xff0c;GET 和 POST 是两种常用的请求方法&#xff0c;它们在发送请求时有一些区别&#xff1a; GET 请求&#xff1a; GET 请求用于向服务器请求获取指定资源&#xff0c;请求参数会附加在 URL 的末尾&#xff0c;以查询字符串的形式出现。GET 请求将请求…...

还不知道光场相机吗?

1.什么是光场&#xff1f; 光场&#xff08;light field&#xff09;&#xff1a;就是指光在每一个方向通过每一个点的光量。 从概念里&#xff0c;你至少可以得到两点信息&#xff1a; 光场包含光的方向光场包含一个点的光量 2.什么是光场相机 我们知道普通的相机拍照成像…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

构建Docker镜像的Dockerfile文件详解

文章目录 前言Dockerfile 案例docker build1. 基本构建2. 指定 Dockerfile 路径3. 设置构建时变量4. 不使用缓存5. 删除中间容器6. 拉取最新基础镜像7. 静默输出完整示例 docker runDockerFile 入门syntax指定构造器FROM基础镜像RUN命令注释COPY复制ENV设置环境变量EXPOSE暴露端…...

软件工程教学评价

王海林老师您好。 您的《软件工程》课程成功地将宏观的理论与具体的实践相结合。上半学期的理论教学中&#xff0c;您通过丰富的实例&#xff0c;将“高内聚低耦合”、SOLID原则等抽象概念解释得十分透彻&#xff0c;让这些理论不再是停留在纸面的名词&#xff0c;而是可以指导…...

项目研究:使用 LangGraph 构建智能客服代理

概述 本教程展示了如何使用 LangGraph 构建一个智能客服代理。LangGraph 是一个强大的工具&#xff0c;可用于构建复杂的语言模型工作流。该代理可以自动分类用户问题、分析情绪&#xff0c;并根据需要生成回应或升级处理。 背景动机 在当今节奏飞快的商业环境中&#xff0c…...

机器学习——随机森林算法

随机森林算法是一种强大的树集成算法&#xff0c;比使用单个决策树效果要好得多。 以下是生成树集成的方法&#xff1a;假设有一个大小为m的训练集&#xff0c;然后对于b1到B&#xff0c;所以执行B次&#xff0c;可以使用有放回抽样来创建一个大小为m的训练集。所以如果有10个…...