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

【开发篇】十六、SpringBoot整合JavaMail实现发邮件

文章目录

  • 0、相关协议
  • 1、SpringBoot整合JavaMail
  • 2、发送简单邮件
  • 3、发送复杂邮件

0、相关协议

  • SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于发送电子邮件的传输协议
  • POP3(Post Office Protocol - Version 3):用于接收电子邮件的标准协议
  • IMAP(Internet Mail Access Protocol):互联网消息协议,是POP3的替代协议

1、SpringBoot整合JavaMail

STEP1:加入JavaMail起步依赖:

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

STEP2:相关配置:

spring:  mail:    host: smtp.qq.com  # 发邮件,smtp协议,后面.运营商    username: *********@qq.com    password: *********  # 不是邮箱的密码,是下面获取的一个授权码

注意password,不是邮箱的登录密码,是一个授权码,获取方式,在QQ邮箱中是【设置】-【邮箱账号】-【开启】

在这里插入图片描述

发送验证短信:

在这里插入图片描述

然后在上个页面点保存更改,(记得点保存更改)复制这个授权码就是password的值,即可配置邮件客户端成功。

在这里插入图片描述
其他类型的邮箱获取方式类似,比如163:

在这里插入图片描述

STEP3:注入JavaMailSender对象,定义发送邮件的接口

@Autowired    
private JavaMailSender javaMailSender;   

整合完成,下面按简单邮件和复杂邮件来写。简单即普通文本,复杂即超链接、附件等。

2、发送简单邮件

以下用QQ邮箱给163邮箱发一个简单文本的邮件:

//定义接口
public interface SendMailService{void sendMail();
}
//实现类@Service
public class SendMailServiceImpl implements SendMailService { @Autowired    private JavaMailSender javaMailSender;   //这些值也可以不硬编码,写在配置文件中@Value取值private String from = "********@qq.com";	 // 发送人    private String to = "********@126.com";	 // 接收人   private String subject = "测试邮件";		 // 邮件主题   private String text = "测试邮件正文";	 	// 邮件内容@Override    public void sendMail() {       SimpleMailMessage mailMessage = new SimpleMailMessage();  //mailMessage.setFrom(from); //from后面加个名字,比如xxx公司,不然发送发一串邮箱数字,谁知道你是谁      mailMessage.setFrom(from + "别名");   //这里的to是个可变长String,即可发送多人mailMessage.setTo(to);        mailMessage.setSubject(subject);        mailMessage.setText(text);//mailMessage.setSendDate();        //设置发送的时间//其他设置自行setjavaMailSender.send(mailMessage);     //发送}}

写个测试类看下效果:

在这里插入图片描述
联不通:

在这里插入图片描述

我在公司内网写的,网络不通,不是25端口被禁的原因,在外网是可以ping通smtp.qq.com这个host的。先跳过了。

3、发送复杂邮件

正文为html,比如超链接或者图片。以及发送附件:

//超链接
private String text = "<a href='https://www.baidu.com/'>百度</a>";//图片
private String img = "<img src='https://pic35.photophoto.cn/20150511/0034034892281415_b.jpg' />";@Override
public void sendMail() {    try {        MimeMessage mimeMessage = javaMailSender.createMimeMessage(); //第二个参数,即是否允许添加多部件//我后面要添加各种附件,所以这里必须是true       MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);       mimeMessageHelper.setFrom(from);       mimeMessageHelper.setTo(to);        mimeMessageHelper.setSubject(subject);//不加true,默认当普通文本,true即按html来解析        mimeMessageHelper.setText(text,true);  //添加附件File file1 = new File("logo.png"); File file2 = new File("D:\\myboot.jar"); //如果是手写文件名,记得添加个后缀,比如.png,方便在邮件里可预览 mimeMessageHelper.addAttachment(file1.getName(),file1);  mimeMessageHelper.addAttachment("一个jar包.jar",file2);    javaMailSender.send(mimeMessage);    } catch (Exception e) {       e.printStackTrace();   }
}

注意点:

  • 不再用简单消息对象,而是MimeMessage对象,并把它包装成mimeMessageHelper对象
  • 要传附件的话,mimeMessageHelper对象构造方法的第二个参数传true
  • setText方法重载,第二个参数传true,就是讲text按照html来解析,而不是普通文本
  • 注意最后send的还是MimeMessage对象,不是mimeMessageHelper对象

相关文章:

【开发篇】十六、SpringBoot整合JavaMail实现发邮件

文章目录 0、相关协议1、SpringBoot整合JavaMail2、发送简单邮件3、发送复杂邮件 0、相关协议 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;&#xff1a;简单邮件传输协议&#xff0c;用于发送电子邮件的传输协议POP3&#xff08;Post Office Protocol - Versi…...

如何在Ubuntu系统部署RabbitMQ服务器并公网访问【内网穿透】

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…...

Flutter笔记:用于ORM的Floor框架简记

Flutter笔记 用于ORM的Floor框架简记 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133377191 floor 模块地址&#xff1a;https://pub.dev/packages/floor 【介绍】&#xff1a;最近想找用于Dart和Flutter的ORM框架&#xff0c;偶然间发现了Floor…...

Zabbix自定义脚本监控MySQL数据库

一、MySQL数据库配置 1.1 创建Mysql数据库用户 [rootmysql ~]# mysql -uroot -p create user zabbix127.0.0.1 identified by 123456; flush privileges; 1.2 添加用户密码到mysql client的配置文件中 [rootmysql ~]# vim /etc/my.cnf.d/client.cnf [client] host127.0.0.1 u…...

【Spatial-Temporal Action Localization(五)】论文阅读2020年

文章目录 1. Actions as Moving Points摘要和结论引言&#xff1a;针对痛点和贡献模型框架实验 1. Actions as Moving Points Actions as Moving Points (ECCV 2020) 摘要和结论 MovingCenter Detector (MOCdetector) 通过将动作实例视为移动点的轨迹。通过三个分支生成 tub…...

Linux基本指令(中)——“Linux”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;小雅兰的内容是Linux基本指令呀&#xff01;&#xff01;&#xff01;下面&#xff0c;让我们进入Linux的世界吧&#xff01;&#xff01;&#xff01; cp指令&#xff08;重要&#xff09; mv指令&#xff08;重要&#xff09…...

OWASP Top 10漏洞解析(3)- A3:Injection 注入攻击

作者&#xff1a;gentle_zhou 原文链接&#xff1a;OWASP Top 10漏洞解析&#xff08;3&#xff09;- A3:Injection 注入攻击-云社区-华为云 Web应用程序安全一直是一个重要的话题&#xff0c;它不但关系到网络用户的隐私&#xff0c;财产&#xff0c;而且关系着用户对程序的新…...

Java自定义类加载器的详解与步骤

自定义类加载器的步骤 继承ClassLoader类&#xff1a;首先创建一个新的类&#xff0c;该类需要继承ClassLoader类。可以通过直接继承ClassLoader或是间接继承URLClassLoader等子类来实现。重写findClass()方法&#xff1a;在自定义类加载器中&#xff0c;最重要的是重写findCl…...

完美清晰,炫酷畅享——Perfectly Clear Video为你带来卓越的AI视频增强体验

在我们日常生活中&#xff0c;我们经常会拍摄和观看各种视频内容&#xff0c;无论是旅行记录、家庭聚会还是商务演示&#xff0c;我们都希望能够呈现出最清晰、最精彩的画面效果。而现在&#xff0c;有一个强大的工具可以帮助我们实现这一目标&#xff0c;那就是Perfectly Clea…...

如何让FileBeat支持http的output插件

目录 1 缘由2 编译filebeat3 配置虚拟机访问外网4 编译beats-output-http4.1 使用本地包4.2 发布在线包 5 测试6 beats-output-http的部分解释 1 缘由 官网的filebeat只有以下几种output插件&#xff1a; Elasticsearch ServiceElasticsearchLogstashKafkaRedisFileConsole …...

解密人工智能:决策树 | 随机森林 | 朴素贝叶斯

文章目录 一、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 二、决策树2.1 优点2.2 缺点 三、随机森林四、Naive Bayes&#xff08;朴素贝叶斯&#xff09;五、结语 一、机器学习算法简介 机器学习算法是一种基于数据和经验的算法&#xff0c;通过对…...

web:[极客大挑战 2019]BabySQL

题目 点进页面显示如下 查看源代码 先尝试一下万能密码 没用&#xff0c;or被过滤了 试着双写看看 回显一串&#xff0c;也不是flag 先查询列数尝试一下&#xff0c;把union select过滤了&#xff0c;使用双写 构造payload /check.php?usernameadmin&password1 %27 ununi…...

DRM全解析 —— plane详解(1)

本文参考以下博文&#xff1a; Linux内核4.14版本——drm框架分析(5)——plane分析 特此致谢&#xff01; 1. 简介 一个plane代表一个image layer&#xff08;硬件图层&#xff09;&#xff0c;最终的image由一个或者多个plane(s)组成。plane和 Framebuffer 一样是内存地址。…...

数据结构总结

数据结构 相关博文 单链表数组模拟单链表-CSDN博客双链表数组模拟双链表-CSDN博客栈及单调栈数组模拟栈以及单调栈-CSDN博客队列及单调队列数组模拟队列以及单调队列-CSDN博客KMPKMP详细算法思路-CSDN博客TrieTire树的理解-CSDN博客并查集并查集&#xff08;面试常考&#xff…...

在SOLIDWORKS搭建一个简易的履带式机器人

文章目录 前言一、构建模型基本单元二、搭建车体模块三.插入轮子4.构建履带 前言 趁着十一假期&#xff0c;在solidworks中搭建了一个履带式机器人小车&#xff0c;计划将其应用在gazebo中完成多机器人编队的仿真。 一、构建模型基本单元 构建底板&#xff08;a面&#xff09…...

C# 为什么要限制静态方法的使用

前言 在工作了一年多之后&#xff0c;我发现静态方法的耦合问题实在是头疼。如果可以尽量不要使用静态方法存储数据&#xff0c;如果要存储全局数据就把数据放在最顶层的主函数里面。 静态方法问题 耦合问题&#xff0c;不要用静态方法存储数据 我这里有两个静态方法&#…...

【已解决】Pyecharts折线图,只有坐标轴没有折线数据

【已解决】Pyecharts折线图&#xff0c;只有坐标轴没有折线数据 1、问题复现2、原因3、问题解决 1、问题复现 在做简单的数据通过 Pyecharts 生成折现图的时候&#xff0c;一直只有坐标轴没有折线数据&#xff0c;但是代码一直看不出问题&#xff0c;代码如下&#xff1a; im…...

win10搭建Selenium环境+java+IDEA(3)

这里主要对前面的maven和selenium做补充说明&#xff0c;以及更新一些pom文件下载依赖的问题。 IDEA里面&#xff0c;如果你创建的工程是maven工程文件&#xff0c;那么就会有一个pom.xml文件&#xff0c;可以在这个网站&#xff1a;https://mvnrepository.com/搜索依赖&#…...

String 、Stringbuffer、StringBuilder区别

上代码 public class Test {public static void main(String[] args) {//String 连接10000次消耗1127ms//StringBuffer 连接10000次消耗5ms//StringBuilder 连接10000次消耗3msStringTest(10000);StringBufferTest(10000);StringBuilderTest(10000);}public static void Strin…...

如何提升爬虫IP使用效率?精打细算的方法分享

在进行爬虫数据采集时&#xff0c;爬虫IP是不可或缺的工具。然而&#xff0c;爬虫IP的费用可能是一个爬虫项目的重要开支之一。为了帮助您节省爬虫IP经费&#xff0c;本文将分享一些经济高效的方法&#xff0c;让您在使用爬虫IP时更加节约成本&#xff0c;提高经济效益。 一、优…...

League-Toolkit:重新定义英雄联盟游戏体验的智能助手

League-Toolkit&#xff1a;重新定义英雄联盟游戏体验的智能助手 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit …...

OpenAirInterface (OAI) 实战:如何用USRP搭建你的第一个5G仿真环境(附避坑指南)

OpenAirInterface (OAI) 实战&#xff1a;如何用USRP搭建你的第一个5G仿真环境&#xff08;附避坑指南&#xff09; 当5G技术从实验室走向商业化时&#xff0c;开源软件无线电平台OpenAirInterface&#xff08;OAI&#xff09;正成为开发者验证创新想法的关键工具。不同于商业设…...

基于大数据技术的产品评价分析系统设计与实现

前言本研究聚焦于设计与实现一种基于大数据技术的产品评价分析系统&#xff0c;通过构建多层架构体系与融合多元技术方法&#xff0c;为企业决策提供智能化支撑。 研究采用分层架构设计理念&#xff0c;将系统划分为数据采集、存储、处理、分析与展示五大模块。数据采集层综合运…...

YOLOv8鹰眼目标检测问题解决:常见部署错误与使用技巧汇总

YOLOv8鹰眼目标检测问题解决&#xff1a;常见部署错误与使用技巧汇总 1. 引言&#xff1a;为什么选择YOLOv8鹰眼目标检测 YOLOv8作为当前计算机视觉领域最先进的目标检测模型之一&#xff0c;以其卓越的实时性和准确性赢得了广泛认可。鹰眼目标检测镜像基于Ultralytics官方YO…...

Windows右键菜单重构指南:从混乱到高效的ContextMenuManager实战

Windows右键菜单重构指南&#xff1a;从混乱到高效的ContextMenuManager实战 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 问题诊断&#xff1a;你的右键菜单是…...

Mermaid Live Editor:代码驱动图表设计的终极解决方案

Mermaid Live Editor&#xff1a;代码驱动图表设计的终极解决方案 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor…...

Pixel Aurora Engine部署教程:Nginx反向代理+HTTPS配置像素AI服务公网访问

Pixel Aurora Engine部署教程&#xff1a;Nginx反向代理HTTPS配置像素AI服务公网访问 1. 项目介绍与准备 Pixel Aurora Engine是一款基于AI扩散模型的高端像素艺术生成工具&#xff0c;采用复古8-bit游戏风格界面设计。通过本教程&#xff0c;您将学会如何通过Nginx反向代理和…...

Sunshine开源游戏串流:打造你的专属云游戏服务器终极指南

Sunshine开源游戏串流&#xff1a;打造你的专属云游戏服务器终极指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏&#xff1f;厌倦了被商业云游戏平…...

[模电]从PN结到实用电路:二极管的深度解析与设计指南

1. PN结&#xff1a;二极管的物理基础 想象一下把一块P型半导体和N型半导体紧密贴合在一起&#xff0c;就像把两块不同颜色的橡皮泥揉捏在一起。P型半导体里充满了带正电的"空穴"&#xff08;可以理解为缺少电子的位置&#xff09;&#xff0c;而N型半导体则富含自由…...

传统信号处理与AI结合:FUTURE POLICE模型前端预处理技术详解

传统信号处理与AI结合&#xff1a;FUTURE POLICE模型前端预处理技术详解 最近在做一个语音相关的AI项目&#xff0c;发现直接把麦克风录到的原始音频丢给模型&#xff0c;效果总是不太理想。背景的键盘声、远处的谈话声&#xff0c;甚至是空调的嗡嗡声&#xff0c;都会让模型的…...