Spring Boot 如何实现邮件发送

news2024/10/5 21:23:13

Spring Boot邮件发送

在现代的Web应用程序中,邮件通知已经成为了一项非常重要的功能。例如,在用户注册、密码重置、订单确认等方面,我们通常都会使用邮件来通知用户。在Spring Boot应用程序中,我们可以使用JavaMailSender来实现邮件发送。

在本文中,我们将介绍如何在Spring Boot应用程序中实现邮件发送,并提供相应的代码示例。

在这里插入图片描述

邮件发送机制

在Spring Boot应用程序中,邮件发送的机制如下:

  1. 在控制器方法中接收邮件参数。

  2. 在业务层服务中使用JavaMailSender发送邮件。

  3. 在控制器方法中返回邮件发送结果。

下面我们将介绍如何在Spring Boot应用程序中使用JavaMailSender实现邮件发送。

添加依赖

pom.xml文件中添加以下依赖:

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

这个依赖将添加JavaMailSender和Spring Boot的支持。

配置邮件发送参数在application.yml文件中添加邮件发送参数配置:

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

在上面的配置中,hostport分别指定邮件服务器的地址和端口号。usernamepassword分别指定发件人的邮箱账号和密码。properties指定了一些SMTP协议的属性,例如是否需要身份验证和是否开启TLS加密等。

您可以根据自己的需求更改这些配置。

发送邮件

在业务层服务中,我们可以使用JavaMailSender发送邮件。下面是一个发送邮件的示例代码:

@Service
public class EmailService {

    @Autowired
    private JavaMailSender mailSender;

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

在上面的代码中,我们使用@Autowired注解将JavaMailSender注入到EmailService中。sendEmail()方法接收三个参数:to表示收件人邮箱地址,subject表示邮件主题,text表示邮件正文。我们使用SimpleMailMessage类创建了一个邮件对象,并调用JavaMailSender.send()方法来发送邮件。

现在,我们已经完成了邮件发送的所有步骤,可以测试我们的应用程序了。

测试邮件发送

为了测试邮件发送,我们可以在控制器方法中调用EmailService.sendEmail()方法,例如:

@RestController
public class EmailController {

    @Autowired
    private 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!";
    }
}

在上面的代码中,我们使用@Autowired注解将EmailService注入到EmailController中。我们定义了一个sendEmail()方法来测试邮件发送。该方法调用EmailService.sendEmail()方法来发送邮件,并返回一个成功消息。

我们可以使用Postman或浏览器等工具向/sendEmail接口发送GET请求来测试邮件发送:

GET http://localhost:8080/sendEmail

如果一切正常,您应该看到以下响应:

Email sent successfully!

同时,您应该收到一封测试邮件。如果您没有收到测试邮件,请检查您的邮件配置是否正确。

发送HTML邮件

在实际应用中,我们通常会发送带有HTML格式的邮件。要发送HTML邮件,我们可以使用MimeMessageHelper类来创建一个MimeMessage对象,并将邮件内容设置为HTML格式。

下面是一个发送HTML邮件的示例代码:

@Service
public class EmailService {

    @Autowired
    private JavaMailSender mailSender;

    public void sendHtmlEmail(String to, String subject, String text) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(text, true);
        mailSender.send(message);
    }
}

在上面的代码中,我们使用MimeMessageHelper类创建了一个MimeMessage对象,并调用MimeMessageHelper.setText()方法将邮件内容设置为HTML格式。其中,第二个参数设置为true表示这是一个HTML邮件。

发送带有附件的邮件

在某些情况下,我们可能需要发送带有附件的邮件,例如发送电子书、报告等。要发送带有附件的邮件,我们可以使用MimeMessageHelper类来添加附件。

下面是一个发送带有附件的邮件的示例代码:

@Service
public class EmailService {

    @Autowired
    private JavaMailSender mailSender;

    public void sendAttachmentEmail(String to, String subject, String text, String filePath) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(text, true);

        FileSystemResource file = new FileSystemResource(new File(filePath));
        helper.addAttachment(file.getFilename(), file);

        mailSender.send(message);
    }
}

在上面的代码中,我们使用FileSystemResource类创建了一个文件资源对象,并使用MimeMessageHelper.addAttachment()方法将文件添加到邮件中。其中,第一个参数表示附件的名称,第二个参数表示附件的文件资源对象。

总结

通过本文,我们了解了在Spring Boot应用程序中实现邮件发送的具体步骤。我们首先添加了相关的依赖和配置,然后编写了服务类来发送邮件。我们还介绍了如何发送HTML邮件和带有附件的邮件。

在实际应用中,邮件发送是非常常见的功能之一。通过掌握邮件发送的基本知识,我们可以在开发过程中轻松地实现邮件通知功能,为用户提供更好的体验。

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

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

相关文章

2022年长三角高校数学建模竞赛A题学在长三角解题全过程文档及程序

2022年长三角高校数学建模竞赛 A题 学在长三角 原题再现&#xff1a; 长三角高等教育规模和优质高等教育资源数量处于全国领先水平。从 2019年和 2013-2019 年的平均值来看&#xff0c;长三角地区人口数量在全国占比分别是 16.22&#xff05;和 16.10&#xff05;&#xff0c…

在Css上吃过的亏

一、前言 最近参加了公司的一个小程序的开发项目&#xff0c;虽然很简单&#xff0c;但是非常急三天就要交。本来就是实习生加上前端不熟练的我&#xff0c;最终在Css定位上吃了很大的亏。今天就来了解一下Css中的几个定位。 二、什么是定位 在Css中有一个position属性&…

技术干货 | ​Navicat 面向 PostgreSQL 查询超时的工具解决方案

早前&#xff0c;我们发表过一篇《PostgreSQL 与 Navicat &#xff1a;数据库的中坚力量》 &#xff0c;从产品的发展介绍了两者的渊源与共性&#xff0c;获得了许多童鞋的认可。而随着PostgreSQL 在国内热度愈发高涨&#xff0c;应用也愈发广泛。近期&#xff0c;我们收到许多…

Chirpstack服务器简介和搭建教程

LoRaWAN网络主要优势体现在低成本、广域连接和低功耗&#xff0c;同时具有较多的开源平台可供使用。使用Chirpstack服务器可以快速搭建本地LoRaWAN网络。本文重点介绍一下Chirpstack服务器是做什么的和Chirpstack服务器的安装教程&#xff1a; Chirpstack是一款多组件的、部署…

vue中 antdesginVue <a-image/>图片标签去掉蒙层(鼠标滑过)里面的“预览”二字 或者使用deep自定义样式不生效问题。

vue中 antdesginVue 图片标签去掉蒙层&#xff08;鼠标滑过&#xff09;里面的“预览”二字 或者使用deep自定义样式不生效问题。 看似去掉这两个字很简单&#xff0c; 其实搞了我一上午&#xff0c;是真的不好去掉呀&#xff0c;这里得吐槽下ant官方 。。。。什么deep呀都是不…

是面试官放水,还是公司实在是太缺人?这都没挂,字节跳动原来这么容易进...

字节是大企业&#xff0c;是不是很难进去啊&#xff1f;” “在字节跳动做软件测试&#xff0c;能得到很好的发展吗&#xff1f; 一进去就有12K&#xff0c;其实也没有想的那么难” 直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在华为和…

PostgreSQL 16 beta 重磅发布,OpenPie 再次引领中国贡献关键力量

PostgreSQL 一直被誉为全球最先进的开源关系数据库之一&#xff0c;在 DB-engines 排行榜上长期稳居前五。5 月 25 日&#xff0c;PostgreSQL 全球开发团队官方宣布&#xff0c;PostgreSQL 16 Beta 1 版本正式发布。 本次 PostgreSQL 新版本功能亮点众多&#xff0c;涉及多个模…

Docker环境java程序的时间设置

先上解决方案 java程序生成的时间、日志时间不对的解决方案&#xff1a; #在Dockerfile文件中加入以下两行代码&#xff0c;用于指定bild的镜像为东八区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneDoc…

生产检验配置和操作

1、概念 在SAP系统的生产过程中运行中间产品或成品的质量流程&#xff0c;例如每个班次的检查等&#xff0c;在生产订单发布时生成检验批&#xff0c;在系统中进行检验的检验类型为03&#xff0c;当有生产订单发布时&#xff0c;将在系统中自动创建检验批。 2、前台和后台配置…

【操作系统】03.内存管理

存储器的层级结构 程序的运行 现代操作系统使用的连接方式&#xff1a;运行时动态链接 对某些模块的链接推迟到程序执行时才进行 现代操作系统使用的装入方式&#xff1a;动态重定位 程序装入内存后&#xff0c;逻辑地址不会立即转换成物理地址&#xff0c;而是推迟到指令执行…

Energy-Based Learning for Scene Graph Generation

[2103.02221] Energy-Based Learning for Scene Graph Generation (arxiv.org) 目录 Abstarct 1 Introduction 2 Approach 2.1 Scene Graph Generation 2.2 Energy Based Modeling 2.3 Energy Models for Scene Graphs Generation 2.4 Energy Model Architectue 2.4.1…

PCB多层板为什么都是偶数层?奇数层不行吗?

PCB板有单面、双面和多层的&#xff0c;其中多层板的层数不限&#xff0c;目前已经有超过100层的PCB&#xff0c;而常见的多层PCB是四层和六层板。那为何大家会有“PCB多层板为什么都是偶数层&#xff1f;”这种疑问呢&#xff1f;相对来说&#xff0c;偶数层的PCB确实要多于奇…

朋友面试字节要求月薪25K,明显感觉他背了很多面试题...

最近有朋友去字节面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&#…

Unity WebGL打包配置本地服务器

第一步打包 1&#xff09;、先对Player Setting进行设置 2&#xff09;、设置打包的窗口大小 3&#xff09;、遇到异常以及压缩格式 第一个启用异常&#xff0c;指用户指定在运行时意外的代码行为&#xff08;通常被认为错误&#xff09;如何被处理&#xff0c;有三个选项…

进程(四)

进程四 2.21 管程2.22 死锁的概念2.23 死锁的处理策略2.23.1 破坏四个条件2.23.2 动态策略: 避免死锁2.23.3 死锁的检测和解除 2.21 管程 本小计知识概览 为什么要引入管程 管程的定义和基本特征 管程是一种特殊的软件模块&#xff0c;有这些部分组成: 局部于管程的共享数据结…

javaWeb ssh微博系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh微博系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开 发。开发环境为TOMCAT7.0,Myecli…

智慧校园建设主要包括哪些方面的内容?

在当今数字化的时代&#xff0c;越来越多的学校开始实施智慧校园计划&#xff0c;旨在为学生和教师提供更加高效、便捷的学习和教学环境。 那么&#xff0c;究竟什么是智慧校园呢&#xff1f;智慧校园建设主要包括哪些方面的内容&#xff1f;这篇就来详细讲一讲&#xff01; …

3年外包出来,华为、字节全都一面挂,我哭死.....

测试员可以先在外包积累经验&#xff0c;以后去大厂就很容易&#xff0c;基本不会被卡&#xff0c;事实果真如此吗&#xff1f;但是在我身上却是给了我很大一巴掌... 所谓今年今天履历只是不卡简历而已&#xff0c;如果面试答得稀烂&#xff0c;人家根本不会要你。况且要不是大…

字节软测划水四年,内容过于真实......

先简单交代一下吧&#xff0c;潇潇是某不知名211的本硕&#xff0c;18年毕业加入一个小厂&#xff0c;之后跳槽到了字节跳动&#xff0c;一直从事测试开发相关的工作。之前没有实习经历&#xff0c;算是四年半的工作经验吧。 这四年半之间他完成了一次晋升&#xff0c;换了一家…

(转载)基于多层编码遗传算法的车间调度算法(matlab实现)

以下内容大部分来源于《MATLAB智能算法30个案例分析》&#xff0c;仅为学习交流所用。 1 理论基础 遗传算法具有较强的问题求解能力&#xff0c;能够解决非线性优化问题。遗传算法中的每个染色体表示问题中的一个潜在最优解&#xff0c;对于简单的问题来说&#xff0c;染色体…