【第一部分】历史文章:
SpringBoot总结(一)——第一个SpringBoot项目
SpringBoot总结(二)——Spring Boot的自动配置
SpringBoot总结(三)——SpringBoot的配置文件
SpringBoot总结(四)——@Value和@ConfigurationProperties的区别
SpringBoot总结(五)——@PropertySource注解与@ImportResource注解
SpringBoot总结(六)——SpringBoot配置文件占位符
SpringBoot总结(七)——Profile的使用
SpringBoot总结(八)——配置文件的加载位置
SpringBoot总结(九)——@Conditional注解与自动配置报告
SpringBoot总结(十)——SpringBoot+Mybatis实现数据库的CRUD(从创建到实现【超详细附代码】)
SpringBoot总结(十一)——SpringBoot的静态资源映射规则
SpringBoot总结(十二)——登录界面的实现
SpringBoot总结(十三)——修改嵌入式Servlet容器配置
SpringBoot总结(十四)——SpringBoot整合JDBCTemplate及Druid连接池
SpringBoot总结(十五)——接口架构风格(RESTful)
邮件发送是一个常见的功能,注册时的身份认证、重要通知发送等都会用到邮件发送。下面就来详细介绍Spring Boot中如何进行发送邮件的;以及介绍几种不同的邮件的发送方式:分别是发送简单邮件、发送带有附件的邮件、发送带有图片的邮件、以及使用两种模板引擎来构建邮件模板等。
下面将进行介绍,几种不同的邮件的发送方式。
登录QQ邮箱后,找到顶部的设置按钮——>账户按钮。如下图所示:
在账户选项中,找到POP3/SMTP服务,点击开启,如下图所示:
注:这里我已经开启过了,若之前没有开启,点击开启按钮后,按照步骤,将会获取一个授权码,该授权码在后面将会用到的哦。
创建一个springboot项目,具体创建过程这里不再介绍;项目创建完成后,添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
完成后,在配置文件application.properties中配置邮件的基本信息,如下所示
#用户账号
spring.mail.username=1154146166@qq.com
#密码
spring.mail.password=上面获取的授权码
#服务器地址
spring.mail.host=smtp.qq.com
#配置端口
spring.mail.port=465
#配置默认编码
spring.mail.default-encoding=UTF-8
#开启debug,方便开发者查看邮件发送的日志
spring.mail.properties.mail.debug=true
spring.mail.properties.mail.smtp.ssl.enable=true
完成这些配置后,基本的邮件发送环境就搭建成功了。
package com.example;
import org.junit.jupiter.api.Test;
import org.springframework.beans.Mergeable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
@SpringBootTest
class SpringbootMailApplicationTests {
@Autowired
JavaMailSender javaMailSender;
@Test
void contextLoads() {
}
@Test
void sendSimpleMailTest() {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setSubject("通知——今天不上班"); //邮件的主题
simpleMailMessage.setText("大家休息一天!!!"); //邮件的内容
simpleMailMessage.setTo("[email protected]"); //邮件的收件人
simpleMailMessage.setFrom("[email protected]"); //邮件的发送者
simpleMailMessage.setCc("[email protected]"); //邮件的抄送人
javaMailSender.send(simpleMailMessage);
}
}
@Test
void SendAttachFileMailTest() throws Exception{
File file = new File("E:\\mail\\mailTest.txt");
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("通知——今天不上班"); //邮件的主题
helper.setText("大家休息一天!!!",true); //邮件的内容
helper.setTo("[email protected]"); //邮件的收件人
helper.setFrom("[email protected]"); //邮件的发送者
helper.addAttachment(file.getName(),file); // 上传文件
javaMailSender.send(mimeMessage);
}
注:使用MimeMessageHelper简化了邮件的配置,他的构造方法的第二个参数为true,表示构造一个multipart message类型的邮件,multipart message类型的邮件包含多个正文,附件,以及内嵌资源,邮件的表现形式更加的丰富。最后是通过addAttachment方法添加附件。
执行该方法,即可看到邮件发送成功。如下图所示:
/**
* (3)发送带有图片资源的文件
*/
@Test
void SendMailWithImg() throws Exception {
File file = new File("E:\\mail\\mailTest.png");
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("[email protected]"); // //邮件的发送者
helper.setTo("[email protected]"); //邮件的收件人
helper.setSubject("通知——今天不上班"); //邮件的主题
helper.setText("大家休息一天!!!"+""+"",true); //邮件的内容
FileSystemResource resource = new FileSystemResource(file);
helper.addInline("p01", resource); //将资源加入邮件对象中
javaMailSender.send(mimeMessage);
}
对于格式较为复杂的邮件,若采用字符串进行HTML拼接的方式,不但容易出错,而且不易于维护;下面使用HTML模板可以很好的解决这个问题。当然,使用FreeMarker构建邮件模板,首先要添加FreeMarker的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
在resources目录templates目录下面创建mailtemplate.ftl文件作为邮件模板,这里演示的模板比较简单,显示了邮件的内容(可以根据实际的需要定制较为复杂的模板):
<div>
<p>邮件内容:</p>
<b> ${
msg}</b>
</div>
然后创建了一个实体类,为了演示方便,只定义了msg属性。
package com.example.pojo;
public class Message {
private String msg;
public Message() {
}
public Message(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
@Autowired
private FreeMarkerConfigurer configurer;
@Test
void SendHtmlMailTest() throws Exception{
Template template = configurer.getConfiguration().getTemplate("mailtemplate.ftl");
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
StringWriter mail = new StringWriter();
Message message = new Message();
message.setMsg("今天休息。。。");
template.process(message, mail);
helper.setFrom("[email protected]"); // //邮件的发送者
helper.setTo("[email protected]"); //邮件的收件人
helper.setSubject("通知——今天不上班"); //邮件的主题
helper.setText(mail.toString(),true); //邮件的内容
javaMailSender.send(mimeMessage);
}
既然可以使用FreeMarker来进行构建邮件的模板,当然也可以使用hymeleaf来进行构建邮件的模板!!!
首先添加依赖:
<!--引入thymeleaf依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
然后在resources目录templates目录下面创建mailtemplate.html文件作为邮件模板;这里演示的模板比较简单,显示了邮件的内容(可以根据实际的需要定制较为复杂的模板):
<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>演示邮件</title>
</head>
<body>
<p th:text="${msg}"></p>
</body>
</html>
/**
* (5)使用Thymeleaf构建邮件模板
*/
@Autowired
TemplateEngine templateEngine;
@Test
void SendHtmlMailTest2() throws Exception {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
Context context = new Context();
context.setVariable("msg","今天大家休息,不上班。。。");
String mail = templateEngine.process("mailtemplate.html", context);
helper.setFrom("[email protected]"); // //邮件的发送者
helper.setTo("[email protected]"); //邮件的收件人
helper.setSubject("通知——今天不上班"); //邮件的主题
helper.setText(mail,true); //邮件的内容
javaMailSender.send(mimeMessage);
}
注:不同于FreeMarker,Thymeleaf使用了TemplateEngine来对模板进行渲染。通过Context进行构造模板中变量需要的值,使用这种方式比FreeMarker构建邮件模板更加的方便。
执行该方法,即可看到邮件发送成功。如下图所示:
以上分别介绍了几种不同的邮件的发送方式,以及如何来进行构建邮件模板等。希望通过以上例子能给予大家帮助。