基于springBoot 整合JavaMail的网站邮件通知功能实现

JDK版本:jdk17
IDEA版本:IntelliJ IDEA 2022.1.3
SpringBoot 版本:v2.5.7


文章目录

  • 一、关于邮件发送的基本概念
    • 1.1 邮件发送
      • 1.1.1 SMTP协议
    • 1.2 邮件接收
      • 1.2.1 POP3协议
      • 1.2.2 IMAP协议
  • 二、准备工作
    • 2.1 注册邮箱
    • 2.1 获取登录授权码
  • 三、开发简单邮件
    • 3.1 何为简单邮件?
    • 3.2 相关API介绍
    • 3.3 步骤演示
  • 四、开发复杂邮件
    • 4.1 何为复杂邮件?
    • 4.2 相关API介绍
    • 4.3 案例演示


在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、关于邮件发送的基本概念

1.1 邮件发送

1.1.1 SMTP协议

SMTP协议全称为Simple Mail Transfer Protocol,即简单邮件传输协议,这是一种在互联网上传输电子邮件的标准协议。SMTP的主要目的是确保从源邮件服务器到目标邮件服务器的信息可靠、高效地传输。

1.2 邮件接收

1.2.1 POP3协议

POP3协议(Post Office Protocol version 3)是一种用于接收电子邮件的广泛应用层协议,它允许用户通过电子邮件客户端软件从邮件服务器上下载和管理邮件。

1.2.2 IMAP协议

IMAP协议(Internet Message Access Protocol)是一种用于在客户端和邮件服务器之间同步和管理电子邮件的标准协议,相较于POP3协议,IMAP提供了更为高级和灵活的邮件访问功能

特点

  • IMAP允许客户端在保持连接的情况下实时访问邮件服务器上的邮件箱,实现邮件内容的双向同步
  • 用户可以在不同的设备和客户端上随时查看最新的邮件状态和内容,非常适合多设备或多用户共享同一个邮件帐户的情况
  • 客户端可以选择只下载邮件的部分内容(如邮件头部信息)或全部内容,甚至可以按需下载邮件附件,这有利于节省本地存储空间和带宽
  • IMAP协议支持服务器端的邮件搜索功能,客户端可以直接向服务器发送搜索请求,无需下载所有邮件就能查找满足条件的邮件
  • IMAP可以通过SSL/TLS加密信道,保证邮件传输过程中的数据安全

总结

虽然POP3协议在现代电子邮件服务中逐渐被更先进的IMAP协议所取代,但它仍然广泛应用于许多电子邮件系统,尤其是那些强调简单性和离线处理邮件场景中。IMAP协议相比POP3提供了更加丰富的邮件管理和同步功能,更适合于多设备、多客户端同步邮件的场景。


二、准备工作

2.1 注册邮箱

说明

本文以注册126邮箱为例

在这里插入图片描述

2.1 获取登录授权码

说明

邮箱的登录授权码是一种专门用于在第三方客户端或应用程序中登录邮箱账户的临时或永久性一次性密码。这种授权码不是用户的常规邮箱密码,而是为了增强安全性和防止密码泄露而设立的。

如何获取?

①在主界面点击“设置

在这里插入图片描述

②选择“POP3/SMTP/IMAP”,开启IMAP/SMTP服务

在这里插入图片描述

在这里插入图片描述

③使用手机扫描,发送指定短信内容,然后查看登录授权码即可

在这里插入图片描述

在这里插入图片描述


三、开发简单邮件

引言

此处开发邮件通知的功能,依赖于JavaMail API的实现,JavaMail 是由 Oracle 公司开发的一个 Java API,它是 Java 平台上用于处理电子邮件的标准扩展包。JavaMail API 提供了一组丰富的类和接口,允许开发者在 Java应用程序中发送、接收和管理邮件,完全符合 SMTP、IMAP、POP3 等多种邮件协议标准。

3.1 何为简单邮件?

仅仅包含邮件标题,邮件正文的普通邮件

3.2 相关API介绍

  • JavaMailSender:发送邮件的客户端
    • Send(mail): 发送邮件
  • SimpleMailMessage:封装简单邮件的Bean
    • setSubject(): 设置邮件标题
    • setText():设置邮件正文
    • setTo():设置收件地址
    • setFrom():设置发件地址

3.3 步骤演示

①在pop.xml中引入JavaMail依赖

代码示例如下

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

②配置mail参数

参数说明

spring.mail.username= *****           #填写个人真实的mail地址
spring.mail.password =*****           #填写授权码(注意不是原始密码)
spring.mail.host= ****                #根据具体邮件平台填写发送邮件的host(smtp.126.com)

相应配置参数如下

在这里插入图片描述

③代码实战

例子:给自己发送一份简单邮件

示例代码如下

@Autowired
    private JavaMailSender javaMailSender;

    private String subject = "邮件标题";

    private String content ="邮件正文";
	
    private String from = "xxxx@126.com";

    private String to = from;


    @Test
    public void testSendMail(){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        javaMailSender.send(simpleMailMessage);
        System.out.println("简单邮件发送完毕");
    }

运行如下

在这里插入图片描述


四、开发复杂邮件

4.1 何为复杂邮件?

区别于简单邮件,复杂邮件可以附加更多内容,比如在正文中插入图片或链接,邮件带附件等

4.2 相关API介绍

  • JavaMailSender:发送邮件的客户端
    • Send(mail): 发送邮件
  • MimeMessage:封装复杂邮件的Bean
    • javaMailSender.createMimeMessage(): 创建MimeMessage类型的对象
  • MimeMessageHelper: 设置复杂邮件的辅助工具
    • setSubject(): 设置邮件标题
    • setText(正文,html):设置邮件正文(html设为true,表示将文本内容作为HTML处理)
    • setTo():设置收件地址
    • setFrom():设置发件地址
    • addAttachment(fileName,file):设置携带的附件

4.3 案例演示

案例①:构建一个邮件中正文内容携带图片的复杂邮件并发送

代码示例如下

    /**
     *  发送复杂邮件(邮件中包含图片)
     * @throws MessagingException
     */
    @Test
    public void testSendMail2() throws MessagingException {
        MimeMessage mail = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mail);
        helper.setSubject(subject+"2");
        helper.setText(content+2+"<img src= 'https://t7.baidu.com/it/u=2291349828,4144427007&fm=193&f=GIF",true);
        helper.setFrom(from);
        helper.setTo(to);
        javaMailSender.send(mail);
        System.out.println("复杂邮件发送完毕");
    }

运行如下

在这里插入图片描述
在这里插入图片描述

案例②:构建一个邮件中正文内容携带图片,并且附带附件的复杂邮件并发送

代码示例如下

    /**
     *  发送复杂邮件(邮件中包含图片和附件)
     * @throws MessagingException
     */
    @Test
    public void testSendMail3() throws MessagingException {
        MimeMessage mail = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mail,true);
        helper.setSubject(subject+"3");
        helper.setText(content+3+"<img src= 'https://t7.baidu.com/it/u=2291349828,4144427007&fm=193&f=GIF",true);
        helper.setFrom(from);
        helper.setTo(to);
        File file = new File("D:\\Test\\Image\\1.jpeg");
        helper.addAttachment(file.getName(),file);
        javaMailSender.send(mail);
        System.out.println("复杂邮件发送完毕");
    }

运行如下

在这里插入图片描述

案例③:构建一个邮件中正文内容携带图片,并且附带附件的复杂邮件并发送指定的邮箱账号(自己的qq邮箱账号)

在这里插入图片描述

代码示例如下

    /**
     *  发送复杂邮件(邮件中包含图片和附件至指定qq邮箱账号
     * @throws MessagingException
     */
    @Test
    public void testSendMail4() throws MessagingException {
        MimeMessage mail = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mail,true);
        helper.setSubject("测试邮件");
        helper.setText("此为系统测试邮件,请勿回复"+"<img src= 'https://t7.baidu.com/it/u=2291349828,4144427007&fm=193&f=GIF",true);
        helper.setFrom(from);
        helper.setTo(to);
        File file = new File("D:\\Test\\Image\\1.jpeg");
        helper.addAttachment(file.getName(),file);
        javaMailSender.send(mail);
        System.out.println("复杂邮件发送完毕");
    }

运行如下

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

走进jvm之垃圾回收器篇

这里我想首先说明一下&#xff0c;虽然我们经常会拿垃圾回收器来做比较&#xff0c;虽然想挑选一个最好的收集器出来&#xff0c;但是目前也没有说哪一款收集器是完美的&#xff0c;更不存在万能的收集器&#xff0c;我们也只是对收集器选择最适合场景的一个收集器。 那么作者将…

Springboot+Vue前后端分离的在线图书商城(书城)系统

项目介绍 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本图书商城管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

UE snap02 解析ASCII文本文件

UE snap02 解析ASCII文本文件 示例数据data.dat 11389477.2714892 3364559.73645693 0 11389471.5162524 3364567.8860295 0 11389471.5162524 3365813.09618369 0 11388329.6082659 3366184.85895869 0 11388320.4775297 3366197.78833087 0 11388270.6882384 3366214.84811…

OpenAI Sora文生视频模型技术报告中英全文

Video generation models as world simulators 视频生成模型作为世界模拟器 We explore large-scale training of generative models on video data. Specifically, we train text-conditional diffusion models jointly on videos and images of variable durations, resolu…

jQuery 元素操作

文章目录 1. jQuery 样式操作1.1 操作 css 方法1.2 设置类样式方法*案例--tab栏切换 1.3 类操作和className 区别 2. jQuery 效果2.1 显示隐藏效果2.2 滑动效果事件切换动画队列及其停止排队方法 3.3 淡入淡出效果利用渐进方式调整透明度*案例--高亮突出显示 3.4 自定义动画 an…

国务院办公厅发布:政府类网站网页设计规范(试行)

国务院办公厅于2019年12月发布了《政府类网站网页设计规范&#xff08;试行&#xff09;》。该规范的发布旨在统一政府类网站的设计风格和标准&#xff0c;提升政府网站的用户体验和可访问性&#xff0c;推动政府信息公开和服务的提升。 该规范涵盖了政府类网站的各个方面&…

Java IO流(超详细!)上篇

目录 一、File类1、操作文件和目录 二、I/O流概述1、按流向划分&#xff1a;输入流和输出流2、按处理单元划分&#xff1a;字节流和字符流3、按流的角色划分&#xff1a;节点流和处理流 三、字节流1、字节输出流基类&#xff1a;OutputStream2、字节输出流FileOutputStream类3、…

未来已来?国内10家AI大模型盘点(附体验网址)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、阿里云——通义千问2、科大讯飞——星火大模…

全局过滤器实现Jwt校验

从Session到Jwt 之前我写过一篇 什么是 httpsession &#xff1a; 理解HttpSession 在经典的那个登录场景中&#xff1a; 客户端第一次访问的时候 需要登录 登录成功之后 后面再次访问的时候 为了让服务器认识 这是已经登录成功的我 在session中存储的用户的信息。 现在我…

【leetcode】628.三个数的最大乘积

前言&#xff1a;剑指offer刷题系列 问题&#xff1a; 给你一个整型数组 nums &#xff0c;在数组中找出由三个数组成的最大乘积&#xff0c;并输出这个乘积。 示例&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;6思路1&#xff1a; 先去计算输入列表 nums …

蓝桥杯刷题(十三)

1.煤球数目 代码 cnt ans 0 start 1 a [] while cnt<100:ansstartstart 1t ansstartcnt1a.append(ans) print(sum(a))2.奖券数目 代码 def f(x)->bool:while x:if x%104:return Falsex//10return True ans 0 for i in range(10000,100000):if f(i):ans1 print(a…

鸿蒙实战开发:【国际化部件】

简介 国际化部件为应用提供了一系列国际化接口&#xff0c;包括&#xff1a;时间日期格式化、数字格式化、月份星期格式化、单复数、度量衡等相关接口。基于这些国际化接口&#xff0c;开发者可以设计并实现具有良好国际化能力的应用&#xff0c;从而可以高效、低成本的实现应…

(一)基于IDEA的JAVA基础4

注释文本&#xff0c;注释模版 单行注释://开头放在代码前面&#xff0c;对少部分。 多行注释:快捷方式ctrlshift/,对段落代码注 释。 文档注释:/**……**/&#xff0c;用于声明作者或创作时 间。 文档注释如何设置&#xff0c;首先找到File中…

[flask]flask的路由

路由的基本定义 路由就是一种映射关系。是绑定应用程序&#xff08;视图&#xff09;和url地址的一种一对一的映射关系&#xff01;在开发过程中&#xff0c;编写项目时所使用的路由往往是指代了框架/项目中用于完成路由功能的类&#xff0c;这个类一般就是路由类&#xff0c;…

vscode git图形化使用教程(一文秒懂,快速上手)

vscode git图形化使用教程&#xff08;一文秒懂&#xff0c;快速上手&#xff09; vscode 图形化 git  ​ 右键 checkout 功能&#xff0c;切换到当前分支 &#xff08;如果想要切换分支&#xff0c;必须要先上传当前更改的再切换分支&#xff0c;切换完分支后变为之前分支内…

网络编程3.21作业

1.现象 1.增 2.删 3.改 4.查 2.源码 #include<myhead.h>int callback(void* arg,int a,char **msgtext,char **msgheader){if(*(int *)arg0){for(int i0;i<a;i){printf("%s\t",*(msgheaderi));}printf("\n");}for(int i0;i<a;i){printf(&quo…

【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 前言 在多用户环境下管理磁盘空间是服务器管理中的一项重要任务。Linux提供了强大的磁盘配额功能&#xff0c;可以帮助管理员限制用户或组对文件系统…

3.21总结​.Codeforces 第 935 轮(第 3 组)(A~D)题解​

一.Codeforces 第 935 轮&#xff08;第 3 组&#xff09;(A~D)题解 (直接给原文了,我电脑的翻译就是一坨.......) 这到题是一道思维题,理解题目意思就会觉得很简单首先内向的人肯定是一个人一个帐篷,我们只要关心外向的人就可以了,我们只要分外向的人可不可以被3整除,分成两种…

找不到msvcp110.dll无法继续执行程序的多种解决方法

在计算机操作系统中&#xff0c;msvcp110.dll文件扮演着至关重要的角色。作为Microsoft Visual C Redistributable Package的一部分&#xff0c;这个特定的dll文件包含了系统运行多种应用程序所必需的关键运行时库函数。许多Windows应用程序依赖于msvcp110.dll文件来执行基本操…

畅谈AIGC,ISIG-AIGC技术与应用发展峰会成功举办

3月16日&#xff0c;第四届ISIG中国产业智能大会在上海中庚聚龙酒店如期开幕&#xff0c;此次大会由苏州市金融科技协会指导、企智未来科技&#xff08;RPA中国、LowCode低码时代、AIGC开放社区&#xff09;主办。大会聚集了来自不同领域的专家学者、行业领军人物及技术研发者&…