开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情
在实际工作中已经遇到数次需要发邮件的场景了,因此把这个操作分享给大家
1发送的邮箱设置
需要开启POP3/SMTP服务,并获取一个验证码,具体教程参见baidu
引入组件,设置邮箱信息
pom引入
代码语言:txt复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.11</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
需要特别多注意的是,文章正文内容使用html文本编写,因此如果需要动态替换文本内容,就需要引入模板引起来进行操作,因此我引入的是freemarker来进行模板替换
application.properties中设置对应的发送邮箱的信息
代码语言:txt复制spring.mail.host=smtp.qq.com
spring.mail.username=xxxx@qq.com
spring.mail.password=xxxx
实际操作代码
代码语言:txt复制public void sendEmail(){
// 获取MimeMessage对象
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper;
try {
messageHelper = new MimeMessageHelper(message, true, "utf-8");
// 发件人
messageHelper.setFrom("xxxxx@qq.com");
// 收件人
messageHelper.setTo("xxxx@qq.com");
// 邮件主题
message.setSubject("测试邮件发送功能");
// 邮件内容
messageHelper.setText(getNoticeHtmlByTemplate(1,"test.vtl"), true);
messageHelper.addAttachment(MimeUtility.encodeWord("drools.pdf","utf-8","B"),new File("/Users/zhaozhen/Desktop/office/规则引擎drools讲义.pdf"));
// 发件
mailSender.send(message);
// 更新发件状态
log.info("发送理赔通知邮件任务已结束");
} catch (Exception e) {
e.printStackTrace();
}
}
private String getNoticeHtmlByTemplate(int applyCnt,String temp) {
// 创建数据模型
Map<String, Object> map = new HashMap(16);
map.put("name", "赵镇");
// 写数据
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("templates/", TemplateConfig.ResourceMode.CLASSPATH));
Template template = engine.getTemplate(temp);
return template.render(map);
}
对应的在resources下templates邮件正文内容test.vtl下的邮件正文内容为
代码语言:txt复制<html>
<head></head>
<br>
<div>尊敬的${name},你好</div>
<br>
<body>
<div>以下是内容部分</div>
</body>
<br>
</html>
另外就是附件的功能,主要由如下代码完成,及读取文件,设置发送附件时的文件名称
代码语言:txt复制 messageHelper.addAttachment(MimeUtility.encodeWord("drools.pdf","utf-8","B"),new File("/Users/zhaozhen/Desktop/office/规则引擎drools讲义.pdf"));
实际效果
是不是很酷,简单几步操作就可以实现邮件发送的全套功能。