1.引入架包
这里我使用的springboot版本是2.1.4
<!-- 邮件发送-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 引入freeMarker的依赖包. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2.准备好邮件发送通用模板,我把模板命名为:message.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>邮件通知</title>
<style>
.gridtable{width:96%;margin:5px auto}table{font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;width:100%;border-collapse:collapse}td,th{border-width:1px;border-style:solid;border-color:#e6e6e6;position:relative;padding:9px 15px;min-height:30px;line-height:30px;font-size:14px}th{padding-top:5px;padding-bottom:4px;background-color:#f2f2f2;color:#000}
</style>
</head>
<body>
<div>
<#if title?exists >
<h2>${(title)!""}</h2>
</#if>
<table id="customers">
<tr>
<#if trs?exists >
<#list trs as tr>
<th>${(tr)!""}</th>
</#list>
</#if>
</tr>
<#if dataOverviews?exists >
<#list dataOverviews as params>
<tr>
<td>${(params.date)!""}</td>
<td>${(params.customChannelId)!""}</td>
<td>${(params.pageViews)!""}</td>
<td>${(params.individualAdImpressions)!""}</td>
<td>${(params.adRequestsCoverage)!""}</td>
<td>${(params.impressionsCtr)!""}</td>
<td>${(params.impressionsRpm)!""}</td>
<td>${(params.earnings)!""}</td>
<td>${(params.channelRevenue)!""}</td>
</tr>
</#list>
</#if>
</table>
</div>
</body>
</html>
模板预览
3.在 application-pro.yml 文件,这里有多重环境的配置环境,根据自己的环境配置 mail 参数
spring:
mail:
host: smtp.***.qq.com
username: 你要发送的邮箱
password: 发送邮箱授权码
default-encoding: UTF-8
port: 465 #这里的端口原本是25,但是厂商把25端口给疯了,我们采用ssl的465端口
properties:
mail:
smtp:
ssl:
enable: true #这里启用ssl,开启加密传输;这里很重要,不配置会出现如下问题
- 注意:ssl 没有开启会出现如下问题
自己的项目在本地发邮件没任何问题。但部署到服务器,发送邮件显示连接异常
4.编写邮件发送工具方法
/**
* 发送邮箱
* @param mails 接收邮箱
* @param subject 邮箱标题
* @param title 表格标题
* @param trs tr 数据展示列
* @param objects 需要发送的表格数据
* @param templateName 模板文件名称
*/
private void sendMail(String[] mails, String subject, String title, List<String> trs, List<GameReportChannelVo> objects, String templateName){
try {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setFrom(from);
//发送到摸个邮箱上去,可以多个邮箱中间用 , 分割
helper.setTo(mails);
//设置邮件标题
helper.setSubject(subject);
//设置邮件数据
Map<String, Object> model = new HashMap<>(16);
model.put("title",title);
model.put("trs", trs);
model.put("dataOverviews", objects);
//获取模板
Template template = configurer.getConfiguration().getTemplate(templateName);
//设置邮件模板
String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
helper.setText(text,true);
//邮件发送
javaMailSender.send(mimeMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
5.总结
代码基本都没有问题;这里的 GameReportChannelVo 实体要自己建;
在 messages.ftl 中把 params 后面应用的属性替换成自己创建的实体属性
记录这篇文章,主要是怕自己在次采坑;在本地发送邮件好好的,但在线上就不行;原因是 ssl 没有开启,端口也要改成 465
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于