SpringBoot发送邮件(163邮箱)

SpringBoot发送邮件(163邮箱)

常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。下面示例基于163邮箱,其他邮箱也都大同小异。

一、准备工作

登录163邮箱,开启 POP3/SMTP服务

image

设置授权密码,就是后面代码里的密码

image

二、构建SpringBoot项目发送邮件

  • 添加pom依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--方便后面使用thymeleaf模板发送邮件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 配置文件
1
2
3
4
5
6
7
8
9
10
#####163邮箱########
spring.mail.host=smtp.163.com
spring.mail.username=159***3412@163.com
spring.mail.password=***授权密码***
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
  • 邮件发送工具类
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
package com.cnsyear.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Date;
import java.util.Map;

/**
* @Description 邮件相关工具类
* http://www.javaboy.org/2019/0717/springboot-mail.html
* https://blog.csdn.net/Tracycater/article/details/73441010
* @Author jie.zhao
* @Date 2019/12/13 10:22
*/
@Component
public class MailUtils {

@Autowired
private JavaMailSender javaMailSender;
@Autowired
private TemplateEngine templateEngine;

/**
* 发送简单的文件邮件
*
* @param subject 主题
* @param from 发件人
* @param to 收件人
* @param text 邮件的正文
*/
public void sendTextMail(String subject, String from, String to, String text) {
this.sendTextMail(subject, from, to, null, null, text);
}

/**
* 发送简单的文件邮件
*
* @param subject 主题
* @param from 发件人
* @param to 收件人
* @param cc 抄送人,可以有多个抄送人
* @param bcc 隐秘抄送人,可以有多个
* @param text 邮件的正文
*/
public void sendTextMail(String subject, String from, String to, String[] cc, String[] bcc, String text) {
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject(subject);
message.setFrom(from);
message.setTo(to);
if (cc != null) {
message.setCc(cc);
}
if (bcc != null) {
message.setBcc(bcc);
}
message.setSentDate(new Date());
message.setText(text);
javaMailSender.send(message);
}

/**
* 发送带附件的邮件
*
* @param subject 主题
* @param from 发件人
* @param to 收件人
* @param text 邮件的正文
* @param filePath 附件
*/
public void sendAttachFileMail(String subject, String from, String to, String text, String filePath) throws MessagingException {
this.sendAttachFileMail(subject, from, to, null, null, text, filePath);
}

/**
* 发送带附件的邮件
*
* @param subject 主题
* @param from 发件人
* @param to 收件人
* @param cc 抄送人,可以有多个抄送人
* @param bcc 隐秘抄送人,可以有多个
* @param text 邮件的正文
* @param filePath 附件
*/
public void sendAttachFileMail(String subject, String from, String to, String[] cc, String[] bcc, String text, String filePath) throws MessagingException {
//1. 构建邮件对象,注意,这里要通过 javaMailSender 来获取一个复杂邮件对象
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//2. MimeMessageHelper 是一个邮件配置的辅助工具类,true 表示构建一个 multipart message 类型的邮件
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//3. 针对工具类,配置邮件发送的基本信息
helper.setSubject(subject);
helper.setFrom(from);
helper.setTo(to);
if (cc != null) {
helper.setCc(cc);
}
if (bcc != null) {
helper.setBcc(bcc);
}
helper.setSentDate(new Date());
helper.setText(text);

File file = new File(filePath);
//4. 添加邮件附件
helper.addAttachment(file.getName(), file);
//5. 发送邮件
javaMailSender.send(mimeMessage);
}

/**
* 发送邮件使用Thymeleaf模板
*
* @param subject 主题
* @param from 发件人
* @param to 收件人
* @param data 邮件模板需要替换的数据
* @param templatePath 模板路径 路径在src/main/resources/templates/下
* @throws MessagingException
*/
public void sendThymeleafMail(String subject, String from, String to, Map<String, Object> data, String templatePath) throws MessagingException {
this.sendThymeleafMail(subject, from, to, null, null, data, templatePath);
}

/**
* 发送邮件使用Thymeleaf模板
*
* @param subject 主题
* @param from 发件人
* @param to 收件人
* @param cc 抄送人,可以有多个抄送人
* @param bcc 隐秘抄送人,可以有多个
* @param data 邮件模板需要替换的数据
* @param templatePath 模板路径 路径在src/main/resources/templates/下
* @throws MessagingException
*/
public void sendThymeleafMail(String subject, String from, String to, String[] cc, String[] bcc, Map<String, Object> data, String templatePath) throws MessagingException {
//1. 构建邮件对象,注意,这里要通过 javaMailSender 来获取一个复杂邮件对象
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//2. MimeMessageHelper 是一个邮件配置的辅助工具类,true 表示构建一个 multipart message 类型的邮件
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//3. 针对工具类,配置邮件发送的基本信息
helper.setSubject(subject);
helper.setFrom(from);
helper.setTo(to);
if (cc != null) {
helper.setCc(cc);
}
if (bcc != null) {
helper.setBcc(bcc);
}
helper.setSentDate(new Date());

Context context = new Context();
if (data != null) {
data.forEach((k, v) -> {
context.setVariable(k, v);
});
}
String process = templateEngine.process(templatePath, context);
helper.setText(process, true);
javaMailSender.send(mimeMessage);
}
}
  • 测试使用模板发送
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
Java代码

@Autowired
private MailUtils mailUtils;

public void sendMail() throws MessagingException {
//省略data数据的获取。。。

Map<String, Object> data = new HashMap<>();
data.put("dsResult", dsResult);

String[] cc = {"82****80@qq.com"};
String[] bcc = {};
mailUtils.sendThymeleafMail("今日的日期",
"159****3412@163.com", "zha****e6@b****.cn", cc, bcc, data, "mail.html");
}


邮件模板 src\main\resources\templates\mail.html

<!DOCTYPE html>
<html class="x-admin-sm" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>邮件模板</title>
</head>
<body>
<div style="padding: 20px 50px;">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"># 今天的日期</h3>
</div>
<div class="panel-body">
<div>
<p th:text="${dayResult.date}"></p>
<p th:text="${dayResult.yearTips+'年 农历' +dayResult.lunarCalendar}"></p>
<p th:text="${dayResult.typeDes}"></p>
</div>
</div>
</div>
</body>
</html>

参考文档:

http://www.javaboy.org/2019/0717/springboot-mail.html

-------------已经触及底线 感谢您的阅读-------------

本文标题:SpringBoot发送邮件(163邮箱)

文章作者:趙小傑~~

发布时间:2019年12月17日 - 09:50:26

最后更新:2020年03月01日 - 19:50:39

原始链接:https://cnsyear.com/posts/24f29367.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%