【Spring Boot】发送邮件功能

news2024/11/27 0:26:34

发送邮件功能

    • 一.pom.xml文件添加邮件依赖
    • 二.发送邮件信息
      • (1)固定配置在application.yml
      • (2)发送邮箱配成活
      • (3)底层发送邮件方法
      • (4)QQ邮箱开通smtp服务
      • (5)网易邮箱开通smtp服务

一.pom.xml文件添加邮件依赖

		<!-- 发送邮件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

二.发送邮件信息

有两种方式配置:固定配置在application.yml中,或者将发送邮箱配成活的参数
注意:发送者必须开通了smtp服务,(4)和(5)目录中介绍开通smtp服务

备注:host配置
网易邮箱:smtp.163.com
QQ邮箱:smtp.qq.com

(1)固定配置在application.yml

在application.yml中配置

spring:
  mail:
    host: smtp.163.com #邮件服务器地址
    port: 465 #端口号
    username: 邮箱地址
    password: 开通smtp服务获取的授权码
    default-encoding: UTF-8 #默认编码格式
    properties:
      mail:
        debug: true #启动debug调试
        smtp:
          auth: true
          ssl:
            enable: true
          starttls:
            enable: true
            required: true

发送邮件接口

@RequiredArgsConstructor
@RestController
public class SendEmailController
{
private final JavaMailSender mailSender;
// 发送邮件接口
public void sendEmail() {
        try {
            SendMail.sendEmail(mailSender, username, dto.getContent(), dto.getFileName(), dto.getReUserMail());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }  
}

(2)发送邮箱配成活

不需要在application.yml中配置信息

public class SendEmailController {

    public void sendEmail() {
        // 邮箱配置
        String host = "smtp.163.com";
        Integer port = 465;
        String username = "邮箱";
        String password = "授权密码";
        String content = "发送内容";
        String fileName = "发送主题";
        String reUserMail = "收件人";
        try {
            SendMail.sendEmail(host, port, username, password, content, fileName, reUserMail);
        } catch (Exception e) {
            e.printStackTrace();

        }
    }
}

(3)底层发送邮件方法

import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.internet.*;
import java.util.Properties;


@Slf4j
public class SendMail {

    /**
     *
     * @param host 邮件服务器地址
     * @param port 端口号
     * @param username 发送者邮箱
     * @param password 授权密码
     * @param content 内容
     * @param fileName 主题
     * @param reUserMail 收件人邮箱
     */
    public static void sendEmail(String host, int port, String username, String password, String content, String fileName, String reUserMail){
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost(host);
        mailSender.setPort(port);
        mailSender.setUsername(username);
        mailSender.setPassword(password);
        mailSender.setDefaultEncoding("utf-8");

        Properties javaMailProperties = mailSender.getJavaMailProperties();
        javaMailProperties.setProperty("mail.smtp.auth", "true");
        javaMailProperties.setProperty("mail.smtp.ssl.enable", "true");
        javaMailProperties.setProperty("mail.smtp.starttls.enable", "true");
        javaMailProperties.setProperty("mail.smtp.starttls.required", "true");
        javaMailProperties.setProperty("mail.debug", "true");//启用调试
        javaMailProperties.setProperty("mail.smtp.timeout", "3000"); //设置超时时间3秒
        mailSender.setJavaMailProperties(javaMailProperties);
        sendEmail(mailSender, username, content, fileName, reUserMail);
    }


    /**
     * 发送邮件内容
     * @param mailSender
     * @param sender 发送人邮箱
     * @param content 发送内容
     * @param fileName 主题
     * @param reUserMail 收件人邮箱
     */
    public static void sendEmail(JavaMailSender mailSender, String sender, String content, String fileName, String reUserMail) {
        MimeMessage message = null;
        try {
            message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            /**发送者邮箱,即为开通了smtp服务的邮箱*/
            helper.setFrom(sender);
            /**发送到的邮箱*/
            helper.setTo(reUserMail);
            helper.setSubject("主题:" + fileName);
            helper.setText("带附件的邮件内容");
            helper.setText(content, true);
            mailSender.send(message);
        } catch (Exception e){
            e.printStackTrace();
        }
    }

}

(4)QQ邮箱开通smtp服务

在邮箱->设置->账号->开通POP3/SMTP服务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(5)网易邮箱开通smtp服务

邮箱->设置->POP3/SMTP/IMAP->开通POP3/SMTP和IMAP/SMTP服务
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

基础课17——智能客服系统

客户服务是一种以客户为中心的服务模式&#xff0c;旨在提高客户满意度和忠诚度&#xff0c;促进企业业务增长和可持续发展。在客户服务中&#xff0c;企业需要了解客户需求&#xff0c;提供优质、高效、个性化的服务&#xff0c;解决客户问题&#xff0c;满足客户需求&#xf…

蓝图分离卷积BSConv 学习笔记 (附代码)

论文地址&#xff1a;https://arxiv.org/abs/2003.13549 代码地址&#xff1a;https://github.com/zeiss-microscopy/BSConv 1.是什么&#xff1f; BSConv是深度可分离卷积DSConv的升级版本&#xff0c;它更好地利用内核内部相关性来实现高效分离。具体而言&#xff0c;BSCo…

lerna + vite + typescript 多库,多应用共存项目脚手架模板

最近想把多个代码仓进行合并&#xff0c;形成一个大的代码仓&#xff0c;需要将各个库以及应用放在一个项目下&#xff0c;统一打包管理。会形成如下文件结构&#xff1a; 在网上找了一圈&#xff0c;没有找到合适的脚手架模板。索性自己弄一个吧&#xff0c;开源一下&#x…

云产品OSS免费试用获取奖励步骤

文章目录 1、获取活动链接2、报名参加3、试用产品领取产品试用权限上传文件开启加速传输提交作品 4、提交任务获取奖励 1、获取活动链接 活动时间2023.11.1&#xff5e;2023.11.30 名额有限&#xff0c;先到先得 进群群主获取活动链接 2、报名参加 直接点击链接进入小程序进…

Centralized Feature Pyramid for Object Detection解读

Centralized Feature Pyramid for Object Detection 问题 主流的特征金字塔集中于层间特征交互&#xff0c;而忽略了层内特征规则。尽管一些方法试图在注意力机制或视觉变换器的帮助下学习紧凑的层内特征表示&#xff0c;但它们忽略了对密集预测任务非常重要的被忽略的角点区…

自动驾驶算法(四):RRT*算法讲解与代码实现(基于采样的路径规划)

目录 1 RRT算法和RRT*算法 2 RRT*代码相比于RRT的改进 3 RRT*完整代码 1 RRT算法和RRT*算法 从上篇博客我们可以看出&#xff0c;RRT算法找到最短路径特别快。因为它是一段一段的过去的&#xff0c;但同时它产生的路径也是非常糟糕、随机的只要找到了终点就会结束。 因此我们…

INFINI Labs 产品更新 | Agent 全新重构,优化指标采集,支持集中配置管理,支持动态下发等功能

INFINI Labs 产品又更新啦~ 本次更新主要有 Agent、Console、Loadgen 等产品&#xff0c;其中 Agent 进行全新重构升级&#xff0c;新版限制了 CPU 资源消耗&#xff0c;优化了内存&#xff0c;相比旧版内存使用率降低 10 倍&#xff0c;极大的降低了对宿主服务器造成资源占用…

Postgresql在linux环境下以源码方式安装

linux环境下源码方式的安装 1.下载安装包&#xff08;源码安装方式&#xff09; 安装包下载 https://www.postgresql.org/ftp/source/ 2.安装postgresql ① 创建安装目录 mkdir /opt/pgsql12② 解压下载的安装包 cd /opt/pgsql12 tar -zxvf postgresql-12.16.tar.gz ③编…

【UE5 Cesium】actor随着视角远近来变化其本身大小

效果 步骤 1. 首先我将“DynamicPawn”设置为默认的pawn类 2. 新建一个父类为actor的蓝图&#xff0c;添加一个静态网格体组件 当事件开始运行后添加一个定时器&#xff0c;委托给一个自定义事件&#xff0c;每2s执行一次&#xff0c;该事件每2s获取一下“DynamicPawn”和acto…

【优秀毕设】基于vue+ssm+springboot的校园交友网站系统设计(附源码论文)

摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

智能客服系统应用什么技术?

随着科技的飞速发展&#xff0c;智能客服系统逐渐出现在我们的生活中。这些系统不仅能够提供即时的客户服务&#xff0c;还可以通过人工智能等技术实现更加高效和准确的服务。那么&#xff0c;智能客服系统究竟应用了哪些技术呢&#xff1f;本文将详细解析。 1、机器学习技术 …

专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间

自古以来&#xff0c;人们对理想世界的探索从未停止&#xff0c;而最近元宇宙的热潮加速了这一步伐&#xff0c;带来了许多新的应用。作为元宇宙的关键入口&#xff0c;虚拟现实&#xff08;VR&#xff09;将成为连接虚拟和现实的桥梁。苹果发布的VISION PRO头戴设备将人们对VR…

YOLOv8改进之更换BiFPN并融合P2小目标检测层

目录 1. BiFPN 1.1 FPN的演进 2. YOLOv8改进之更换BiFPN并融合P2小目标检测层 1. BiFPN BiFPN&#xff08;Bi-directional Feature Pyramid Network&#xff09;是一种用于目标检测和语义分割任务的神经网络架构&#xff0c;旨在改善特征金字塔网络&#xff08;Feature Pyram…

京东平台3个热门API接口的分享【附代码实例】

应用程序接口API&#xff08;Application Programming Interface&#xff09;&#xff0c;是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统&#xff08;中后台系统&#xff09;或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

微服务接口测试中的参数传递

这是一个微服务蓬勃发展的时代。在微服务测试中&#xff0c;最典型的一种场景就是接口测试&#xff0c;其目标是验证微服务对客户端或其他微服务暴露的接口是否能够正常工作。对于最常见的基于Restful风格的微服务来说&#xff0c;其对外暴露的接口就是HTTP端点(Endpoint)。 这…

基于SSM的餐饮掌上设备点餐系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

纸白银可以双向交易吗?

纸白银是指以合约形式进行交易的白银&#xff0c;投资者可以通过期货市场进行买入和卖出操作。因此&#xff0c;纸白银是可以双向交易的。投资者既可以选择做多&#xff08;买入&#xff09;纸白银合约&#xff0c;也可以选择做空&#xff08;卖出&#xff09;纸白银合约&#…

Qt中正确的设置窗体的背景图片的几种方式

Qt中正确的设置窗体的背景图片的几种方式 QLabel加载图片方式之一Chapter1 Qt中正确的设置窗体的背景图片的几种方式一、利用styleSheet设置窗体的背景图片 Chapter2 Qt的主窗口背景设置方法一&#xff1a;最简单的方式是通过ui界面来设置&#xff0c;例如设置背景图片方法二 &…

默认路由配置

默认路由&#xff1a; 在末节路由器上使用。&#xff08;末节路由器是前往其他网络只有一条路可以走的路由器&#xff09; 默认路由被称为最后的关卡&#xff0c;也就是静态路由不可用并且动态路由也不可用&#xff0c;最后就会选择默认路由。有时在末节路由器上写静态路由时…