SpringBoot中实现发送邮件

news2024/9/22 13:44:03

概要

在Spring Boot中发送电子邮件相对简单。你可以使用Spring的邮件支持来实现这一点。

步骤:

1.添加依赖:首先,需要在你的pom.xml文件中添加Spring Boot的邮件发送器依赖。
2. 配置邮件服务器:在application.properties或application.yml中配置邮件服务器的相关信息。
3. 编写发送邮件的代码:创建一个服务类来封装邮件发送的逻辑。

JavaMailSender接口

在Spring框架中,JavaMailSender 是一个接口,用于发送电子邮件 。

Spring Boot的spring-boot-starter-mail模块提供了自动化配置,简化了在Spring Boot应用程序中发送电子邮件的设置过程。

当你添加了spring-boot-starter-mail依赖后,Spring Boot会自动配置JavaMailSender实例,并根据application.yml文件中的属性来配置这个实例。你可以直接在需要发送邮件的地方通过@Autowired注解将JavaMailSender实例注入到你的类中,然后使用它来发送邮件。
在这里插入图片描述

SpringBoot中实现发送邮件

第一步添加依赖

注意:我是基于springboot 2.7.17

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

获取依赖其他版本的官网:Spring Boot Starter Mail
在这里插入图片描述

配置邮件服务器

QQ邮箱授权码如何获取

在这里插入图片描述

springboot中配置
spring:
  mail:
    host: smtp.qq.com  # qq的邮件服务器主机地址 【163网易邮箱的是smtp.163.com】
    username: 58963727@qq.com  # 登录邮件服务器的邮箱【自己的邮箱】
    password: axqyweertcentfcy  # 授权码
    port: 587  # 邮件服务器端口号  【163网易邮箱的是465】
    smtp:
      auth: true  # 是否需要身份验证
      starttls.enabled: true  # 是否启用 STARTTLS 支持
    default-encoding: utf-8  # 默认邮件编码为 UTF-8
java代码实现

业务层

@Service
public class EmailService {   

    @Autowired
    private JavaMailSender emailSender;

    // 从属性文件中读取发件人地址
    @Value("${spring.mail.username}")
    private String from;

    /**
     * 发送简单文本邮件
     * @param to 收件人地址
     * @param subject 邮件主题
     * @param text 邮件内容
     */
    public void sendSimpleMessage(String to, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);  // 设置发件人邮箱地址
        message.setTo(to);  // 设置收件人地址
        message.setSubject(subject);  // 设置邮件主题
        message.setText(text);  // 设置邮件内容
        emailSender.send(message);  // 发送邮件
    }
}

Controller层

@RestController
@RequestMapping
public class EmailController {

    @Autowired
    private EmailService emailService;

    @PostMapping("/sendEmail")
    public String sendEmail(@RequestBody EmailDTO emailDTO) {
        emailService.sendSimpleMessage(emailDTO.getTo(), emailDTO.getSubject(), emailDTO.getText());
        return "Email sent successfully!";
    }
}


接受前端传过来的json格式的数据

@Data
public class EmailDTO {
    private String to; //表示收件人的电子邮件地址
    private String subject; //表示邮件的主题
    private String text; //表示邮件的正文内容
}
效果

这里用POST测试,发送POST请求
在这里插入图片描述

用的网易163邮箱成功接收
在这里插入图片描述

可能遇到错误

用qq邮箱发邮件
错误:com.sun.mail.smtp.SMTPSendFailedException: 502 Invalid input from 39.152.15.45 to newxmesmtplogicsvrszc19-0.qq.com.
在这里插入图片描述

最后解决的方法是在java代码中直接加入发送方的邮箱:
在这里插入图片描述

用网易邮箱发邮件
错误:Got bad greeting from SMTP host: smtp.163.com, port: 465, response: [EOF]
在这里插入图片描述
解决方法,配置文件中补充

spring:
  mail:
    protocol: smtps

觉得有用的可以留个关注❤

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

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

相关文章

Netty 网络编程深入学习【一】:ByteBuffer 源码解析

ByteBuffer源码阅读 ByteBuffer是一个用于处理字节数据的缓冲区类。它是Java NIO 包的一部分&#xff0c;提供了一种高效的方式来处理原始字节数据。 ByteBuffer 可以用来读取、写入、修改和操作字节数据&#xff0c;它是一种直接操作字节的方式&#xff0c;比起传统的 InputSt…

生成一个好故事!StoryDiffusion:一致自注意力和语义运动预测器必不可少(南开字节)

文章链接&#xff1a;https://arxiv.org/pdf/2405.01434 主页&#xff1a;https://storydiffusion.github.io/ 对于最近基于扩散的生成模型来说&#xff0c;在一系列生成的图像中保持一致的内容&#xff0c;尤其是那些包含主题和复杂细节的图像&#xff0c;是一个重大挑战。本…

什么是抖音橱窗?它和抖音小店有什么区别?普通人更适合做哪个?

大家好&#xff0c;我是电商糖果 相信有很多想在抖音卖货的朋友&#xff0c;都会搞不清抖音橱窗是什么&#xff1f; 甚至会把它和抖音小店当成一个项目&#xff0c;也不知道哪个更适合自己。 自己越了解发现越迷糊&#xff0c;有的说不需要直播&#xff0c;粉丝&#xff0c;…

Wireshark明文抓取

目录 原理 配置 1、配置环境变量 2、Wireshark配置 原理 SSLKEYLOGFILE是一个用于记录SSL/TLS会话中使用的密钥的文件。它主要用于调试和分析SSL/TLS协议。当启用了SSLKEYLOGFILE配置&#xff0c;系统会将所有SSL/TLS会话中使用的密钥记录到指定的文件中。这些密钥可以用来…

SQL注入——绕过information

衔接上文&#xff0c;进一步对SQL注入less-1进行禁止information的操作&#xff0c;上文连接如下&#xff1a; SQL注入less-1-CSDN博客 一、对less-1进行编辑 增加一段代码&#xff0c;作用是禁止information字段 二、进行检查 可以看到代码已经生效&#xff0c;禁止用infor…

分布式光伏管理系统和一般的光伏管理系统相比有什么区别?

随着全球对可再生能源的关注度日益提高&#xff0c;光伏技术作为其中的佼佼者&#xff0c;已经得到了广泛的应用。在光伏技术中&#xff0c;管理系统扮演着至关重要的角色&#xff0c;它关乎着光伏电站的运行效率、能源产出以及运维成本等多个方面。其中&#xff0c;分布式光伏…

中间件研发之Springboot自定义starter

Spring Boot Starter是一种简化Spring Boot应用开发的机制&#xff0c;它可以通过引入一些预定义的依赖和配置&#xff0c;让我们快速地集成某些功能模块&#xff0c;而无需繁琐地编写代码和配置文件。Spring Boot官方提供了很多常用的Starter&#xff0c;例如spring-boot-star…

《第一行代码》第二版学习笔记(9)——服务

文章目录 一、线程二、解决异步消息处理机制1、消息组成2、AsyncTask 三、Service1、启动和停止服务2、活动和服务通信3、服务的生命周期4、创建前台服务5、使用IntentService 四、服务的最佳实践 一、线程 android不允许在子线程中更新IU操作 二、解决异步消息处理机制 1、…

Django框架之请求生命周期流程图

一、引言 WSGI、wsgiref、uwsgi三者是什么关系? WSGI是协议&#xff0c;小写的wsgiref和uwsgi是实现该协议的功能模块 缓存数据库 提前已经将你想要的数据准备好了&#xff0c;需要的时候直接拿就可以&#xff0c;提高了效率和响应时间。 eg:当你在修改你的数据的时候&…

某了么数据获取脚本

某了么数据获取脚本 这段代码定义了一个名为 ElemeH5 的类&#xff0c;继承自 Base 类&#xff0c;用于处理与饿了么平台的API交互。该类包括了多种方法来进行网络请求、数据处理和API接口的动态生成。以下是对主要组成部分的详细解析&#xff1a; 类属性定义&#xff1a; fun…

MQ如何保证可靠性

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;MQ ⛺️稳中求进&#xff0c;晒太阳 消息到达MQ以后&#xff0c;如果MQ不能及时保存&#xff0c;也会导致消息丢失&#xff0c;所以MQ的可靠性也非常重要。 2.数据持久化 为了提高性能&a…

【C语言】文件操作(万字解读超详细解析)

最好的时光&#xff0c;在路上;最好的生活&#xff0c;在别处。独自上路去看看这个世界&#xff0c;你终将与最好的自己相遇。&#x1f493;&#x1f493;&#x1f493; 目录 • ✨说在前面 &#x1f34b;知识点一&#xff1a;什么是文件&#xff1f; • &#x1f330;1.程序…

[渗透利器]某大佬公开自用红队渗透工具

前言 看到群里大佬发的文章&#xff0c;公开了自用的工具&#xff0c;前来拜膜一下。 使用方式 该工具首先需要初始化数据库&#xff0c;Windows推荐使用PHP Study&#xff0c;搭建更方便。 修改默认root密码后新建数据库&#xff0c;账号密码随便填&#xff0c;公网环境注意…

表空间的概述

目录 表空间的属性 表空间的类型 永久性表空间(PermanentTablespace) 临时表空间(Temp Tablespace ) 撤销表空间(Undo Tablespace) 大文件表空间(BigfileTablespace) 表空间的状态 联机状态(Online) 读写状态(Read Write) 只读状态(Read) 脱机状态(Offline) Oracle从…

[ 项目 ] tcmalloc简化版—高并发内存池

目录 前言 基本介绍 高并发 内存池 定长内存池 基本介绍 框架设计 具体实现 性能测试 整体框架介绍 申请内存过程 threadcache 1.基本介绍 2.具体实现 centralcache 1.基本介绍 2.具体实现 pagecache 1.基本介绍 2.具体实现 申请内存连通 释放内存过…

百科词条创建机构有哪些?

在互联网时代&#xff0c;百度百科作为我国最大的中文百科全书&#xff0c;已经成为人们获取知识、查询信息的重要途径。随着百度百科影响力的不断扩大&#xff0c;越来越多的人和企业试图通过创建企业词条来提升自身知名度&#xff0c;企业和个人为了在百度百科上占据一席之地…

Java_从入门到JavaEE_09

一、构造方法/构造器 含义&#xff1a;和new一起是创建对象的功能 特点&#xff1a; 与类名相同的方法没有返回项 注意&#xff1a; 当类中没有写构造方法时&#xff0c;系统会默认添加无参构造&#xff08;无参数的构造方法&#xff09;构造方法可以重载的 有参构造好处&…

Linux 第二十章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

Transformer详解:从放弃到入门(一)

Transformer由论文《Attention is All You Need》提出&#xff0c;是一种用于自然语言处理&#xff08;NLP&#xff09;和其他序列到序列&#xff08;sequence-to-sequence&#xff09;任务的深度学习模型架构&#xff0c;在自然语言处理领域获得了巨大的成功&#xff0c;在这个…

自动化运维工具---Ansible

一 Puppet Puppet是历史悠久的运维工具之一。它是一种基础架构即代码(laC)工具&#xff0c;使用户可以定义其基础 架构所需的状态&#xff0c;并使系统自动化以实现相同状态。 Puppet可监视用户的所有系统&#xff0c;并防止任何偏离已定义状态的情况。从简单的工作流程自动…