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("复杂邮件发送完毕");
}
运行如下