Spring Boot 发送邮件

news/2024/9/23 4:33:43/

Spring Boot 发送邮件

    • 准备工作
      • 引入依赖
      • 邮箱开启SMTP三方登录授权
      • 配置邮件服务器
    • 发送邮件
      • 普通文本邮件
      • 复杂邮件

准备工作

引入依赖

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

邮箱开启SMTP三方登录授权

常用邮箱有开启SMTP授权引导;QQ邮箱

配置邮件服务器

spring:mail:host: smtp.qq.com# 未开启ssl 使用 25,开启ssl 使用 465 或 587port: 465username: xxxpassword: xxxproperties:mail.smtp.auth: true# 开启ssl 上面 port 使用 465 或 587;不开启使用 25mail.smtp.ssl.enable: true
#      mail.smtp.ssl.trust: ${spring.mail.host}
#      mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
#      mail.smtp.socketFactory.port: 465
#      mail.smtp.starttls.enable: true
#      mail.smtp.starttls.required: true
#      mail.debug: true

发送邮件

普通文本邮件

    SimpleMailMessage message = new SimpleMailMessage();message.setTo("收件人");message.setFrom("发件人");message.setSubject("测试邮件");message.setText("Java 给你发的测试邮件");mailSender.send(message);

复杂邮件

html邮件
含附件的邮件

MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
helper.setTo("收件人");
helper.setFrom("发件人");
helper.setSubject("主题");
// html
helper.setText("内容", true);
Path xxxx = Path.of("xxxx");
PathResource file = new PathResource(xxxx);
// 附件
helper.addAttachment(file.getFilename(), file);

http://www.ppmy.cn/news/1124528.html

相关文章

从中序遍历和后序遍历构建二叉树

题目描述 106. 从中序与后序遍历序列构造二叉树 中等 1.1K 相关企业 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1…

AI时代的中国困境: ChatGPT为什么难以复制

如今&#xff0c;几乎所有中国互联网大厂都公布了自己的“类ChatGPT”解决方案&#xff0c;有些还公布了背后的关于AI技术模型的详情。 其中最高调的是百度&#xff0c;其“文心一言”解决方案号称即将接入数十家内容平台和数以百计的媒体、自媒体。腾讯公布的微信 AI 模型“W…

redhat 6.1 测试环境安装 yum

redhat 6.1 测试环境安装 yum 记录 1. 新建虚拟机 1.1 自定义建立虚拟机 自定义创建新的虚拟机 选择硬件兼容性 创建空白硬盘&#xff0c;稍后选择 iso 文件创建系统。 选择操作系统类型 为虚拟机命名 选择处理器配置 选择虚拟机内存 选择虚拟机网络类型 选择…

python循环判断

运算符短路逻辑python优先级 思维导图for循环 运算符 运算符含义and左边和右边同时为True,结果为Trueor左右两边其中一个为True,结果为Truenot如果操作数为True(False)&#xff0c;结果为False(True) 短路逻辑 从左到右&#xff0c;只有当第一操作数的值无法确定逻辑运算的结…

Python项目实战:基于2D或3D的区域增长算法

文章目录 一、简介二、项目实战2.1、2D图像&#xff08;10x10&#xff09;2.2、2D图像&#xff08;100x100&#xff09;2.3、3D图像&#xff08;10x10x10&#xff09; 一、简介 区域增长算法是一种用于图像分割方法&#xff0c;将相邻像素按照一定的相似性合并成一个区域。 步…

Android13 动态切换默认laucnher

需求&#xff1a;Android13 动态切换默认laucnher 废话不多说&#xff1a;直接上代码 package com.taide.launcher.util;import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; imp…

使用Velodyne传感器生成的点云进行快速且稳健的聚类处理:一个C++实践指南

一、引言 点云数据在现今的自动驾驶、机器人以及三维建模领域中扮演着越来越重要的角色。其中&#xff0c;Velodyne传感器作为业内知名的激光雷达产品&#xff0c;其生成的点云数据质量上乘。然而&#xff0c;对于这样的数据进行有效、快速、稳健的聚类处理仍是一个挑战。本文…

vite + vue3 + js 搭建组件库 + 核心配置与使用

vite.config.js 这个官网有写 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from "path" // https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],server:{open:true, //自动打开浏览port:8088 //默认…