为了不错过你们给我的留言,上线了邮箱系统,用到了JavaMailSenderImpl和JavaMailSender,本文讲解SpringBoot如何群发和单发邮件或者附件,模板,HTml,自动配置或者从数据库获取自己配置。
pom文件引用jar包
不管是JavaMailSenderImpl还是JavaMailSender,其实JavaMailSenderImpl继承了JavaMailSender,用来自己配置的
org.springframework.boot
spring-boot-starter-mail
如其他自动化配置模块一样,在完成了依赖引入之后,只需要在 application.properties 中配置相应的属性内容。
application.properties
spring.mail.host=smtp.qq.com
spring.mail.username=13XXXX657@qq.com //发送方的邮箱
spring.mail.password=密码 //对于qq邮箱而言 密码指的就是发送方的授权码
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.password处的值是需要在邮箱设置里面生成的授权码,这个不是真实的密码。
application.yml
mail:
host: smtp.qq.com
username: 13XXXX657@qq.com #发送方的邮箱
password: upzoczdyxbgdfhhd #对于qq邮箱而言 密码指的就是发送方的授权码
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
JavaMailSender
这个我们只要在application.properties配置文件或者application.yml配置文件中配置以下信息,springboot会自动读取,会根据配置文件中的内容去创建 JavaMailSender 实例
@RestController
@RequestMapping("mail")
public class Controller {
//由于Spring Boot的starter模块提供了自动化配置,所以在引入了 spring-boot-starter-mail 依赖之后,会根据配置文件中的内容去创建 JavaMailSender 实例,因此我们可以直接在需要使用的地方直接 @Autowired 来引入邮件发送对象。
@Autowired
JavaMailSender jms;
@GetMapping("/send")
public void send(){
//建立邮件消息
SimpleMailMessage mainMessage = new SimpleMailMessage();
//发送者
mainMessage.setFrom("13XXXX657@qq.com"); //要和配置中发送用户一样,或者会报错
//接收者
mainMessage.setTo("xxxxxx");
//发送的标题
mainMessage.setSubject("嗨喽");
//发送的内容
mainMessage.setText("hello world");
jms.send(mainMessage);
}
}
JavaMailSenderImpl和群发
这个可以自己设置,从数据库中获取各项数据创建,不用在配置文件中配置
@GetMapping("/mail")
public void sendSimpleMail() throws Exception {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();//直接生产一个实例
String users[] = {"xxxxx@qq.com","xxxxx@126.com"}; //群发创建用户
mailSender.setHost("smtp.126.com");
mailSender.setPassword("xxxxx");
mailSender.setPort(25);
mailSender.setProtocol("smtp");
mailSender.setUsername("13XXXX657");//这里是13XXXX657@qq.com的前置,不是整个邮箱地址
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("13XXXX657@qq.com");
message.setTo(users); // 群发
message.setSubject("羽毛球比赛");
message.setText("报名参加羽毛球赛");
mailSender.send(message);
}
其中我们可以设置群发message.setTo(users); 它可以是个数组
发送复杂邮件
上面的例子用到是SimpleMailMessage,看名字就知道很简单的邮件了,我们要发复杂邮件就要用到MimeMessage 。
发送附件:
public void mimeEmail() throws MessagingException {
// MimeMessage 本身的 API 有些笨重,我们可以使用 MimeMessageHelper
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
// 第二个参数是 true ,表明这个消息是 multipart类型的/
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom("13XXXX657@qq.com");
mimeMessageHelper.setTo("****@qianxx.com");
mimeMessageHelper.setSubject("附件邮件主题");
mimeMessageHelper.setText("附件邮件内容");
//添加附件,第一个参数表示添加到 Email 中附件的名称,第二个参数是图片资源
mimeMessageHelper.addAttachment("boot.png", new ClassPathResource("public/images/boot.png"));
javaMailSender.send(mimeMessage);
}
富文本(HTML)邮件发送
Spring 的 Email 功能除了可以添加附件外,甚至可以使用 HTML 来美化消息体的内容。发送富文本的 Email 与发送简单文本的 Email 并没有太大区别,关键是将setText() 方法的消息文本设置为 HTML,并将第二个参数设置为 true,表示这是 HTML 的富文本。
public void htmlEmail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom("13XXXX657@qq.com");
mimeMessageHelper.setTo("****@qianxx.com");
mimeMessageHelper.setSubject("富文本邮件主题");
String html = "Hello,SpringBoot";
mimeMessageHelper.setText(html, true);
// 设置内嵌元素 cid,第一个参数表示内联图片的标识符,第二个参数标识资源引用
mimeMessageHelper.addInline("boot", new ClassPathResource("public/images/boot.png"));
//添加附件,第一个参数表示添加到 Email 中附件的名称,第二个参数是图片资源
javaMailSender.send(mimeMessage);
}
使用 Thymeleaf 模板
Thymeleaf 模板 — email.html
lang="en" xmlns:th="http://www.thymeleaf.org">
charset="UTF-8">
src='cid:boot'>
th:text="${title}">Craig Walls says...
th:text="${content}">Hello Boot!
发送模板邮件
public void thymeleafEmail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom("159****2662@163.com");
mimeMessageHelper.setTo("****@qianxx.com");
mimeMessageHelper.setSubject("ThymeLeaf 模板邮件");
// 利用 Thymeleaf 模板构建 html 文本
Context ctx = new Context();
//给模板的参数的上下文
ctx.setVariable("title", "Craig Walls");
ctx.setVariable("content", "Hello Boot!");
//执行模板引擎,执行模板引擎需要传入模板名、上下文对象
String emailText = templateEngine.process("email/email", ctx);
mimeMessageHelper.setText(emailText, true);
mimeMessageHelper.addInline("boot", new ClassPathResource("/static/img/boot.png"));
javaMailSender.send(mimeMessage);
}
原创来源:滴一盘技术