发送邮件
邮件协议
SMTP协议:投递邮件使用
POP3协议:读取邮件使用
IMAP协议:是对POP3的一个扩展,功能更强
申请授权码
登录邮箱——>点击设置——>账户——>开启POP3/SMTP服务获取授权码,然后就可以使用授权码登录账户给别人发邮件
注意点:当修改密码后将会失效
发送简单邮件
添加依赖
配置application.properties
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=发送用的QQ邮箱
spring.mail.password=申请到的授权码
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
测试类测试
@SpringBootTest
class MailApplicationTests {
@Autowired
JavaMailSender javaMailSender;
@Test
void contextLoads() {
//简单邮件对象 不支持发附件等
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("测试邮件主题");
message.setText("测试文件内容");
message.setFrom("");// 发送用qq邮箱
message.setTo("");// 接收的qq邮箱
message.setSentDate(new Date());
javaMailSender.send(message);
}
}
这null是因为我的邮箱名字叫null········
发送带附件的邮件
@Test
public void test1() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//这里的true开启了添加附件等多样性功能
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("测试邮件主题(附件)");
helper.setText("测试文件内容(附件)");
message.setFrom("");// 发送用qq邮箱
message.setTo("");// 接收的qq邮箱
helper.setSentDate(new Date());
// 文件的名字 和文件的路径 也可以是流
helper.addAttachment("akk.txt",new File("C:\\Users\\CodeTest\\Desktop\\akk.txt"));
// MimeMessageHelper是辅助类,最后发的还是message
javaMailSender.send(mimeMessage);
}
发送带图片资源的邮件
@Test
public void test2() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("测试邮件主题(图片)");
//支持html才可以放图片的标签,邮件的正文是html
helper.setText("测试文件内容(图片)这是第一张图片:<img src='cid:p01'>,这是第一张图片:<img src='cid:p02'>",true);
message.setFrom("");// 发送用qq邮箱
message.setTo("");// 接收的qq邮箱
helper.setSentDate(new Date());
helper.addInline("p01",new FileSystemResource(new File("C:\\Users\\CodeTest\\Desktop\\akk.jpg")));
helper.addInline("p02",new FileSystemResource(new File("C:\\Users\\CodeTest\\Desktop\\akk1.jpg")));
javaMailSender.send(mimeMessage);
}
Thymeleaf做邮件模板
添加Thymeleaf依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
Thymeleaf默认放在templates目录下
模板信息
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>hello,<span th:text="${username}"></span></div>
你的信息如下
<table border="1">
<tr>
<td>职位</td>
<td th:text="${position}"></td>
</tr>
<tr>
<td>职称</td>
<td th:text="${joblevel}"></td>
</tr>
<tr>
<td>薪水</td>
<td th:text="${salary}"></td>
</tr>
<tr>
<td>部门</td>
<td th:text="${dep}"></td>
</tr>
</table>
</body>
</html>
发送代码
@Autowired
TemplateEngine templateEngine;
@Test
public void test3() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("测试邮件主题(thymeleaf)");
Context context = new Context();
context.setVariable("username","akk");
context.setVariable("position","老师");
context.setVariable("joblevel","5");
context.setVariable("salary","2000");
context.setVariable("dep","A");
String process = templateEngine.process("mail.html", context);
helper.setText(process,true);
message.setFrom("");// 发送用qq邮箱
message.setTo("");// 接收的qq邮箱
helper.setSentDate(new Date());;
javaMailSender.send(mimeMessage);
}
测试接收的信息
Freemarker做邮件模板
添加Freemarker依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
模板信息
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>hello,<span>${username}</span></div>
你的信息如下
<table border="1">
<tr>
<td>职位</td>
<td>${position}</td>
</tr>
<tr>
<td>职称</td>
<td>${joblevel}</td>
</tr>
<tr>
<td>薪水</td>
<td>${salary}</td>
</tr>
<tr>
<td>部门</td>
<td>${dep}</td>
</tr>
</table>
</body>
</html>
发送代码
@Autowired
TemplateEngine templateEngine;
@Test
public void test4() throws MessagingException, IOException, TemplateException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("测试邮件主题(freemarker)");
Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(),"templates");
Template template = configuration.getTemplate("mail.ftlh");
Map<String, Object> map = new HashMap<>();
map.put("username","akk");
map.put("position","老师");
map.put("joblevel","5");
map.put("salary","2000");
map.put("dep","A");
StringWriter out = new StringWriter();
template.process(map, out);
helper.setText(out.toString(),true);
message.setFrom("");// 发送用qq邮箱
message.setTo("");// 接收的qq邮箱
helper.setSentDate(new Date());;
javaMailSender.send(mimeMessage);
}