Springboot实现邮件发送

1.项目的创建

1.1创建一个Springboot项目

核心pom.xml的配置

1
2
3
4
5
<!--邮件服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

1.2配置邮箱服务配置文件

在application.yml里面配置如下

下面以QQ邮箱为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
spring:
# 邮件服务
mail:
host: smtp.qq.com
username: <qq邮箱账户>
password: <smtp服务的授权码>
# 端口号465或587
port: 587
# 默认的邮件编码为UTF-8
default-encoding: UTF-8
# 配置SSL 加密工厂
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
debug: true

2.核心业务代码

2.1在service层创建MailService.java

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
46
47
@Service
public class MailService {

@Autowired
private JavaMailSender mailSender;

//传入邮箱发件人
@Value("${spring.mail.username}")
private String sender;


//发送简单邮件
public void sendSimpleMail(String receiver,String subject,String context){

SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(sender);
simpleMailMessage.setTo(receiver);
simpleMailMessage.setText(context);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setSentDate(new Date());

try {
mailSender.send(simpleMailMessage);
System.out.println("简单邮件已发送");
}catch (Exception e){
System.out.println("简单邮件发送出错"+e);
}

}

//发送HTML邮件
public void sendHtmlMail(String receiver,String subject,String context){
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom(sender);
mimeMessageHelper.setTo(receiver);
mimeMessageHelper.setText(context,true);
mimeMessageHelper.setSubject(subject);
mailSender.send(mimeMessage);
} catch (MessagingException e) {
System.out.println("简单邮件发送出错"+e);
}
}

}

2.2在controller创建mailController.java

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
@Controller
public class mailController {

@Resource
MailService mailService;

@Resource
TemplateEngine templateEngine;

@RequestMapping("/tomail")
@ResponseBody
public String toMail(){
String title = "<邮件标题>";
String email = "<收件人邮箱>";
Context context = new Context();
// 设置传入模板的页面的参数 参数名为:id 参数随便写一个就行
context.setVariable("id", "000");
// emailTemplate是要发送的模板邮件
String process = templateEngine.process("emailTemplate", context);
mailService.sendHtmlMail(email,title,process);
return "success";
}

}