SpringBoot邮件发送 1邮件传输协议 2开启SM

1.邮件传输协议

电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行邮件传递,那就必须要遵守一定的规则,这个规则就是邮件传输协议。下面我们分别简单介绍几种协议:

  1. SMTP协议:全称为 Simple Mail Transfer Protocol,简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则。
  2. POP3协议:全称为 Post Office Protocol,邮局协议。它定义了邮件客户端软件和POP3邮件服务器的通信规则。
  3. IMAP协议:全称为 Internet Message Access Protocol,Internet消息访问协议,它是对POP3协议的一种扩展,也是定义了邮件客户端软件和IMAP邮件服务器的通信规则。

2.开启SMTP服务并获取授权码

这里我们以QQ邮箱为例,要想在SpringBoot发送QQ邮件必须先打开QQ邮箱的SMTP功能,默认是关闭的,具体操作如下。进入邮箱→设置→账户,然后找到下面这个

image.png

这里有个验证

image.png

验证完成之后

image.png

3.导入依赖与配置说明

这里我用的是gradle,引入spring-boot-starter-mail模块

1
java复制代码implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.4.10'

application.yml配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
java复制代码spring:
mail:
# 邮件服务器地址
host: smtp.qq.com
# SMTP 服务器的端口
port: 587
username: 1786087581@qq.com
# 这里的密码是邮件授权码不是邮箱登陆的密码
# 这里的邮件授权码我随便写的
password: aksdfgsdfgxieiig
# 额外的配置,这里我写了两个,只用其中一个就行了,开启ssl加密,保证安全连接
properties:
mail:
smtp:
socketFactory:
class: javax.net.ssl.SSLSocketFactory
## ssl:
## enable :true
#设置邮件的编码为utf-8
default-encoding: utf-8

补充:

126邮箱SMTP服务器地址:smtp.126.com,端口号:465或者994

2163邮箱SMTP服务器地址:smtp.163.com,端口号:465或者994

yeah邮箱SMTP服务器地址:smtp.yeah.net,端口号:465或者994

qq邮箱SMTP服务器地址:smtp.qq.com,端口号465或587*

4.邮件发送

4.1 简单邮件发送

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
java复制代码
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.io.File;
import java.util.Date;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Api(value = "邮件接口",tags = "邮件接口",description = "邮件接口")
@RequestMapping("/mail")
public class SendMailController {

@Autowired
JavaMailSender javaMailSender;

@GetMapping("/sendMail")
public void sendMail(){
//构建一个邮件对象
SimpleMailMessage message = new SimpleMailMessage();
//设置邮件主题
message.setSubject("这是一封测试邮件");
//设置邮件发送者
message.setFrom("1786087581@qq.com");
//设置邮件接收者,可以有多个接收者
message.setTo("1******40@qq.com","1*******7@163.com");
//设置邮件抄送人,可以有多个抄送人
message.setCc("6666***8@qq.com");
//设置隐秘抄送人,可以有多个
message.setBcc("l*****3@163.com");
//设置邮件发送日期
message.setSentDate(new Date());
//设置邮件的正文
message.setText("测试邮件正文ok");
//发送邮件
javaMailSender.send(message);
}

测试结果 发送成功
image.png

4.2发送带图片资源的邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
java复制代码@GetMapping("/sendMailWithImg")
@ApiOperation(value = "简单带图片邮件发送",notes = "简单带图片邮件发送",produces = "application/json")
public void sendMailWithImg() throws MessagingException {
//创建一个复杂的邮件
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//设置邮件主题
helper.setSubject("这是一封带图片测试邮件");
//设置邮件发送者
helper.setFrom("1786087581@qq.com");
//设置邮件接收者
helper.setTo("1******40@qq.com");
//设置邮件抄送人
helper.setCc("6666***8@qq.com");
//设置隐秘抄送人
helper.setBcc("l*****3@163.com");
//设置邮件发送日期
helper.setSentDate(new Date());
//设置邮件的正文
helper.setText("<p>这是一封带图片测试邮件,这封邮件包含两种图片,分别如下</p><p>第一张图片:</p><img src='cid:p01'/><p>第二张图片:</p><img src='cid:p02'/>",true);
helper.addInline("p01",new FileSystemResource(new File("C:\Users\hasee\Desktop\9cae14e699762b40a747d4198.jpg")));
helper.addInline("p02",new FileSystemResource(new File("C:\Users\hasee\Desktop\微信图片_202101.jpg")));
javaMailSender.send(mimeMessage);
}

测试结果 发送成功

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%