文章目录
一、异步回调插入充值记录
-
不需要平台订单号(不需要返,无所谓)
-
userId没有返回来(不需要)
-
如何获取vin,simcardId获取vin信息接口
二、内部
-
根据vin获取车辆昵称接口,还没提供
-
个推接口(提供接口传入文言和vin),还没提供
-
gerrit代码提交,权限配置,分支名字的问题Test,不能用test
-
邮件发送调试
-
写根据vin获取车辆昵称接口接口文档
-
写个推接口接口文档
三、Gerrit新建项目
- gerrit新建项目需要找某某在某个网址新建
四、svn文档路径
-
http://10.10.144.174/svn/hondavsp/4.DevelopLibrary/03.SystemDesign(SD)/2-系统设计式样书/4-UIUE设计
-
今天补文档
五、邮件模板启用
邮件模板
姓名,您好:
您的车联网支撑平台登录密码已重置,重置后的初始密码为“user_手机号末6位”。
为保障您的账户安全,请尽快登录系统并修改您的密码。如果您对本次重置密码操作有疑问,请联系系统管理员。
此致
车联网业务支撑平台
问题
- 传入ArrayList参数,模板id,查库,替换参数
- 调用方如何知道传入什么模板id? 商定好
- 对于邮件模板的增删改查
- 后台维护一次只启用一个同类型模板 否
- 数据库模板增加type,只有一个启用 否
方案一
-
传入ArrayList参数,模板id,目的地邮箱,查库,替换参数
-
缺点:每次更换模板需要更改代码
方案二
-
传入ArrayList参数,类型,系统,目的地邮箱,查库,替换参数,
-
根据类型、系统查找对应的模板,后台设置启用那个模板
-
优点:后台维护,发送邮件样式修改不需要修改代码
-
不涉及用户登陆
数据库 设计
-
表名:vsp_email_template
-
字段:主键,模板名称,描述、模板url、模板html、type、system_name、replace_word、create_time、update_time、is_delete
-
模板名称唯一索引
sql
CREATE TABLE `vsp_email_template` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`template_name` varchar(255) DEFAULT NULL COMMENT '模板名称',
`email_subject` varchar(255) DEFAULT NULL COMMENT '邮件主题',
`template_desc` varchar(255) DEFAULT NULL COMMENT '描述',
`template_html` mediumtext COMMENT '模板html',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_delete` tinyint(4) DEFAULT '1' COMMENT '1有效 0无效',
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQUE` (`template_name`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
insert into `vsp_email_template` (`id`, `template_name`, `email_subject`, `template_desc`, `template_html`, `create_time`, `update_time`, `is_delete`) values('1','模板名称','测试邮件主题','重置密码','<div class=\"ax_default _文本段落\" id=\"u8592\">\r\n <div id=\"u8592_div\"></div>\r\n <div class=\"text \" id=\"u8592_text\">\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">${userName!},您好:</span></p>\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">您的车联网支撑平台登录密码已重置,重置后的初始密码为“${password!}”。</span></p>\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">为保障您的账户安全,请尽快登录系统并修改您的密码。如果您对本次重置密码操作有疑问,请联系系统管理员。</span></p>\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">此致</span></p>\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">车联网业务支撑平台</span></p>\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">\r\n <br></span>\r\n </p>\r\n </div>\r\n</div>','2020-04-22 17:04:42','2020-04-22 17:04:44','1');
思路:
- 从数据库中取对应的变量名称及对应的变量值,后台先取到html文件的内容,然后用raplace方法将对应的变量进行替换,替换后的文本作为文件的正文内容。
- 或者用free marker替换
六、java发送附件是.bin格式
- 附件由于名字过长且含有中文的造成形成.bin文件
static {
System.setProperty("mail.mime.splitlongparameters","false");
System.setProperty("mail.mime.charset","UTF-8");
}
七、邮件模板
<div class="ax_default _文本段落" id="u8592">
<div id="u8592_div"></div>
<div class="text " id="u8592_text">
<p>
<span style="color: rgb(0, 102, 255);">${userName!},您好:</span></p>
<p>
<span style="color: rgb(0, 102, 255);">您的车联网支撑平台登录密码已重置,重置后的初始密码为“${password!}”。</span></p>
<p>
<span style="color: rgb(0, 102, 255);">为保障您的账户安全,请尽快登录系统并修改您的密码。如果您对本次重置密码操作有疑问,请联系系统管理员。</span></p>
<p>
<span style="color: rgb(0, 102, 255);">此致</span></p>
<p>
<span style="color: rgb(0, 102, 255);">车联网业务支撑平台</span></p>
<p>
<span style="color: rgb(0, 102, 255);">
<br></span>
</p>
</div>
</div>
-
在线查看界面:https://c.runoob.com/front-end/61
-
html格式化:http://tool.chinaz.com/Tools/jsformat.aspx
-
#{姓名} 格式替换
-
如果没有替换词,用户输入其他东西,模板存在也会替换,加替换词做校验
八、freemarker字符串替换
pom.xml
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
FreemarkerUtils.java
package com.mtons.mblog.base.utils;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
/**
* @author Administrator
*/
@Slf4j
public class FreemarkerUtils {
private static String defaultCharacter = "UTF-8";
private static Configuration cfg;
private FreemarkerUtils() {
}
static {
cfg = new Configuration(Configuration.getVersion());
cfg.setDefaultEncoding(defaultCharacter);
cfg.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX);
}
/**
* 对模板进行渲染
* @param data 数据Map
* @param tplStr 模板
* @return
*/
public static String generateString(
Map<String, Object> data, String tplStr) {
String result = null;
String name="myStrTpl";
try {
StringTemplateLoader stringTemplateLoader= new StringTemplateLoader();
stringTemplateLoader.putTemplate(name, tplStr);
cfg.setTemplateLoader(stringTemplateLoader);
Template template = cfg.getTemplate(name,defaultCharacter);
StringWriter out = new StringWriter();
template.process(data, out);
out.flush();
result= out.toString();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 将模板渲染以后保存到文件
* @param templateFileDir 模板目录
* @param fileName 模板文件名称
* @param targetFilePath 渲染后文件名称
* @param dataMap 数据
* @return
*/
public static boolean renderingTemplateAndGenerateFile(String templateFileDir,
String fileName,String targetFilePath,Map<String, Object> dataMap){
boolean flag=true;
try {
// 设置文件所在目录的路径
cfg.setDirectoryForTemplateLoading(new File(templateFileDir));//模板路径
// 获取模版
Template template = cfg.getTemplate(fileName);
// 设置输出文件名,和保存路径
File outFile = new File(targetFilePath);
// 将模板和数据模型合并生成文件 重点设置编码集
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
// 生成文件
template.process(dataMap, out);
// 关闭流
out.flush();
out.close();
} catch (Exception e) {
log.error("生产模板文件失败!",e);
flag=false;
}
return flag;
}
public static void main(String[] args) {
Map<String,Object> map= new HashMap<>();
map.put("date", "2017-05-11 11:55:55");
map.put("caseNo", "AJ00000001");
map.put("descrip", "这是描述信息==========");
String template="案件编号为:${caseNo!} "
+ " 日期为:${date!} "
+ " 自动获取日期为:${ .now?string('yyyy年MM月dd日')}"
+ "描述:${descrip!}";
String generateString = FreemarkerUtils.generateString(map, template);
System.out.println("------");
System.out.println(generateString);
}
}
九、多个收件人处理
-
https://blog.csdn.net/zmh458/article/details/84205480
-
设置收件人地址,以逗号隔开
十、HTML代码存储到数据库中
-
直接复制粘贴进不去,会涉及到转义之类的,果然转义之后就能存储了。
-
HTML在线转义:https://www.sojson.com/rehtml
html转义实现
HtmlUtil.java
package com.reachauto.vspcloud.message.utils;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.util.HtmlUtils;
/**
* Html工具类
*
* @author Administrator*/
public class HtmlUtil {
/**
* Spring的HtmlUtils进行转义
*/
public static String htmlEscape(String str) {
if (StringUtils.isBlank(str)) {
return null;
} else {
return HtmlUtils.htmlEscape(str);
}
}
/**
* Spring的HtmlUtils进行还原
*/
public static String htmlUnescape(String str) {
if (StringUtils.isBlank(str)) {
return null;
} else {
return HtmlUtils.htmlUnescape(str);
}
}
/**
* StringEscapeUtils的HtmlUtils进行转义
*/
public static String stringHtmlEscape(String str) {
if (StringUtils.isBlank(str)) {
return null;
} else {
return StringEscapeUtils.escapeHtml(str);
}
}
/**
* StringEscapeUtils的HtmlUtils进行还原
*/
public static String stringHtmlUnescape(String str) {
if (StringUtils.isBlank(str)) {
return null;
} else {
return StringEscapeUtils.unescapeHtml(str);
}
}
public static void main(String[] args) {
System.out.println(stringHtmlEscape("<div class=\"ax_default _文本段落\" id=\"u8592\">\n" +
" <div id=\"u8592_div\"></div>\n" +
" <div class=\"text \" id=\"u8592_text\">\n" +
" <p>\n" +
" <span style=\"color: rgb(0, 102, 255);\">姓名,您好:</span></p>\n" +
" <p>\n" +
" <span style=\"color: rgb(0, 102, 255);\">您的车联网支撑平台登录密码已重置,重置后的初始密码为“user_手机号末6位”。</span></p>\n" +
" <p>\n" +
" <span style=\"color: rgb(0, 102, 255);\">为保障您的账户安全,请尽快登录系统并修改您的密码。如果您对本次重置密码操作有疑问,请联系系统管理员。</span></p>\n" +
" <p>\n" +
" <span style=\"color: rgb(0, 102, 255);\">此致</span></p>\n" +
" <p>\n" +
" <span style=\"color: rgb(0, 102, 255);\">车联网业务支撑平台</span></p>\n" +
" <p>\n" +
" <span style=\"color: rgb(0, 102, 255);\">\n" +
" <br></span>\n" +
" </p>\n" +
" </div>\n" +
"</div>"));
System.out.println(stringHtmlUnescape("<div class="ax_default _文本段落" id="u8592">\n" +
" <div id="u8592_div"></div>\n" +
" <div class="text " id="u8592_text">\n" +
" <p>\n" +
" <span style="color: rgb(0, 102, 255);">姓名,您好:</span></p>\n" +
" <p>\n" +
" <span style="color: rgb(0, 102, 255);">您的车联网支撑平台登录密码已重置,重置后的初始密码为“user_手机号末6位”。</span></p>\n" +
" <p>\n" +
" <span style="color: rgb(0, 102, 255);">为保障您的账户安全,请尽快登录系统并修改您的密码。如果您对本次重置密码操作有疑问,请联系系统管理员。</span></p>\n" +
" <p>\n" +
" <span style="color: rgb(0, 102, 255);">此致</span></p>\n" +
" <p>\n" +
" <span style="color: rgb(0, 102, 255);">车联网业务支撑平台</span></p>\n" +
" <p>\n" +
" <span style="color: rgb(0, 102, 255);">\n" +
" <br></span>\n" +
" </p>\n" +
" </div>\n" +
"</div>"));
}
}
十一、发送邮件接口入参
{
"toEmilAddress": "[email protected],[email protected],[email protected],[email protected]",
"templateName": "模板名称",
"replaceWord": {
"password": "888888",
"userName": "刘看山"
},
"carbonCopyEmail": "[email protected],[email protected],[email protected],[email protected]"
}
十二、数据库实体JSON
{
"createTime": 1587546282000,
"id": 1,
"isDelete": 1,
"templateDesc": "重置密码",
"templateHtml": "<div class=\"ax_default _文本段落\" id=\"u8592\">\r\n <div id=\"u8592_div\"></div>\r\n <div class=\"text \" id=\"u8592_text\">\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">${userName!},您好:</span></p>\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">您的车联网支撑平台登录密码已重置,重置后的初始密码为“${password!}”。</span></p>\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">为保障您的账户安全,请尽快登录系统并修改您的密码。如果您对本次重置密码操作有疑问,请联系系统管理员。</span></p>\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">此致</span></p>\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">车联网业务支撑平台</span></p>\r\n <p>\r\n <span style=\"color: rgb(0, 102, 255);\">\r\n <br></span>\r\n </p>\r\n </div>\r\n</div>",
"templateName": "模板名称",
"updateTime": 1587546284000
}
十三、json文本转Java对象
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
// json > java对象
String json = "{\n" +
"\t\"createTime\": 1587546282000,\n" +
"\t\"id\": 1,\n" +
"\t\"isDelete\": 1,\n" +
"\t\"templateDesc\": \"重置密码\",\n" +
"\t\"templateHtml\": \"<div class=\\\"ax_default _文本段落\\\" id=\\\"u8592\\\">\\r\\n <div id=\\\"u8592_div\\\"></div>\\r\\n <div class=\\\"text \\\" id=\\\"u8592_text\\\">\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">${userName!},您好:</span></p>\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">您的车联网支撑平台登录密码已重置,重置后的初始密码为“${password!}”。</span></p>\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">为保障您的账户安全,请尽快登录系统并修改您的密码。如果您对本次重置密码操作有疑问,请联系系统管理员。</span></p>\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">此致</span></p>\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">车联网业务支撑平台</span></p>\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">\\r\\n <br></span>\\r\\n </p>\\r\\n </div>\\r\\n</div>\",\n" +
"\t\"templateName\": \"模板名称\",\n" +
"\t\"updateTime\": 1587546284000\n" +
"}";
EmailTemplate emailTemplate = null;
try {
emailTemplate = mapper.readValue(json, EmailTemplate.class);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(emailTemplate);
}
十四、本地模拟连接数据库
package com.reachauto.vspcloud.message.controller;
import com.alibaba.fastjson.JSONObject;
import com.reachauto.vspcloud.common.response.Response;
import com.reachauto.vspcloud.common.response.ResponseHelper;
import com.reachauto.vspcloud.message.bean.entity.EmailTemplate;
import com.reachauto.vspcloud.message.bean.enu.MessageStatusEnum;
import com.reachauto.vspcloud.message.utils.FreemarkerUtils;
import com.reachauto.vspcloud.message.utils.MailUtil;
import com.reachauto.vspcloud.service.MailService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
*
* @author Administrator
*/
@Slf4j
@RestController
@RequestMapping("mail")
public class MailController {
@Autowired
private MailService mailService;
@ApiOperation(value = "发送邮件", notes = "发送邮件")
@ApiResponses(value = {
@ApiResponse(code = 000000, message = "Successful — 发送邮件"),
@ApiResponse(code = 200002, message = "发送邮件失败")
})
@RequestMapping(value = "/sendEmail", method = RequestMethod.POST)
public Response<Object> sendEmail(@RequestBody JSONObject jsonParam) {
log.info("发送邮件入参:[{}]", jsonParam.toJSONString());
try{
if(jsonParam.isEmpty()){
return ResponseHelper.createResponse(MessageStatusEnum.MESSAGE_RELEASE_ISNULL.getCode(), MessageStatusEnum.MESSAGE_RELEASE_ISNULL.getName());
}
Map<String, Object> jsonMap = JSONObject.toJavaObject(jsonParam, Map.class);
EmailTemplate emailTemplate = mailService.selectByTemplateName((String)jsonMap.get("templateName"));
if(emailTemplate == null){
return ResponseHelper.createResponse(MessageStatusEnum.TEMPLATE_EMPTY_ERROR.getCode(), MessageStatusEnum.TEMPLATE_EMPTY_ERROR.getName());
}
//替换文言
Map<String,Object> mapWenYan= new HashMap<>(16);
Map<String,Object> handleWord = (Map<String, Object>) jsonMap.get("replaceWord");
Iterator it = handleWord.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry) it.next();
mapWenYan.put((String)entry.getKey(), entry.getValue());
}
String generateString = FreemarkerUtils.generateString(mapWenYan, emailTemplate.getTemplateHtml());
//发送邮件
MailUtil.sendMail((String)jsonMap.get("toEmilAddress"), generateString, emailTemplate.getEmailSubject(), (String)jsonMap.get("carbonCopyEmail"));
log.info("邮件模板内容:[{}]", generateString);
return ResponseHelper.createResponse(MessageStatusEnum.REQUIRE_SUCCESS.getCode(), MessageStatusEnum.REQUIRE_SUCCESS.getName());
}catch (Exception e){
e.printStackTrace();
return ResponseHelper.createResponse(MessageStatusEnum.REQUIRE_ERROR.getCode(), MessageStatusEnum.REQUIRE_ERROR.getName());
}
}
}
十五、发送邮件工具类优化
package com.reachauto.vspcloud.message.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.reachauto.vspcloud.common.response.ResponseHelper;
import com.reachauto.vspcloud.message.bean.entity.EmailTemplate;
import com.reachauto.vspcloud.message.bean.enu.MessageStatusEnum;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.File;
import java.io.IOException;
import java.util.*;
/**
* 发送邮件
*
* @author Administrator
*/
public class MailUtil {
private static String mailAccount = "[email protected]";
private static String password = "Meiyou@123!";
private static String myEmailSMTPHost = "smtp.reachauto-vsp.com";
static {
System.setProperty("mail.mime.splitlongparameters","false");
System.setProperty("mail.mime.charset","UTF-8");
}
/**
* 发送邮件的方法
*
* @param toEmilAddress 邮件的接收方 多个接收方用,分割
* @param mes mes 内容
* @param emailSubject 邮件主题
* @param carbonCopyEmail 抄送 多个接收方用,分割
*/
public static void sendMail(String toEmilAddress, String mes,String emailSubject,String carbonCopyEmail) {
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", myEmailSMTPHost);
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.ssl.enable", "true");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(mailAccount, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(mailAccount));
//message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to));
//设置收件人地址,以逗号隔开
InternetAddress[] sendTo = InternetAddress.parse(toEmilAddress);
message.setRecipients(MimeMessage.RecipientType.TO, sendTo);
//设置抄送人地址,以逗号隔开
InternetAddress[] carbonCopy = InternetAddress.parse(carbonCopyEmail);
message.setRecipients(MimeMessage.RecipientType.CC, carbonCopy);
message.setSubject(emailSubject);
message.setContent(mes, "text/html;charset=UTF-8");
System.out.println("开始发送邮件");
Transport.send(message);
System.out.println("邮件发送成功");
} catch (MessagingException e) {
e.printStackTrace();
throw new RuntimeException("发送邮件失败" + e);
}
}
/**
* 发送附件
* @param to
* @param mes
* @param file
* @throws Exception
*/
public static void sendEmailWithFile(String to, String mes,File file) throws Exception {
// 1. 创建邮件会话
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", myEmailSMTPHost);
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.ssl.enable", "true");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(mailAccount, password);
}
});
// 2. 创建邮件对象
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(mailAccount));
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to));
message.setSubject("邮件主题");
// 3. 设置参数:标题、发件人、收件人、发送时间、内容
//message.setSubject("带图片邮件");
//message.setSender(sendMan);
//message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("xxx.com"));
message.setSentDate(new Date());
/*************** 设置邮件内容: 多功能用户邮件 (related) *******************/
// 4.1 构建一个多功能邮件块
MimeMultipart related = new MimeMultipart("related");
// 4.2 构建多功能邮件块内容 = 左侧文本 + 右侧图片资源
MimeBodyPart content = new MimeBodyPart();
MimeBodyPart resource = new MimeBodyPart();
// 设置具体内容: a.资源(图片)
DataSource ds = new FileDataSource(file);
//使用到了JAF框架把磁盘上的文件加到resource
DataHandler handler = new DataHandler(ds);
resource.setDataHandler(handler);
// 设置资源名称,给外键引用
resource.setContentID(file.getName());
// 设置具体内容: b.文本
content.setContent(mes, "text/html;charset=UTF-8");
related.addBodyPart(content);
related.addBodyPart(resource);
/******* 4.3 把构建的复杂邮件快,添加到邮件中 ********/
message.setContent(related);
// 5. 发送
Transport trans = session.getTransport();
trans.connect("[email protected]", "xxx");
trans.sendMessage(message, message.getAllRecipients());
trans.close();
}
public static void main(String[] args) throws Exception {
//MailUtil.sendMail("[email protected]", "test code");
//MailUtil.sendEmailWithFile("[email protected]", "test code",new File("C:\\Users\\Administrator\\Desktop\\个推以及查询车辆昵称接口文档.docx"));
Map<String,Object> map= new HashMap<>(16);
map.put("templateName","模板名称");
map.put("toEmilAddress","[email protected],[email protected]");
map.put("carbonCopyEmail","[email protected],[email protected]");
//模板中需要替换的数据,具体字段请联系配置模板老师,示例
Map<String,Object> subMap= new HashMap<>(16);
subMap.put("userName","张三");
subMap.put("password","123456");
map.put("replaceWord",subMap);
ObjectMapper mapper = new ObjectMapper();
// json > java对象
String json = "{\n" +
"\t\"createTime\": 1587546282000,\n" +
"\t\"id\": 1,\n" +
"\t\"isDelete\": 1,\n" +
"\t\"templateDesc\": \"重置密码\",\n" +
"\t\"templateHtml\": \"<div class=\\\"ax_default _文本段落\\\" id=\\\"u8592\\\">\\r\\n <div id=\\\"u8592_div\\\"></div>\\r\\n <div class=\\\"text \\\" id=\\\"u8592_text\\\">\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">${userName!},您好:</span></p>\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">您的车联网支撑平台登录密码已重置,重置后的初始密码为“${password!}”。</span></p>\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">为保障您的账户安全,请尽快登录系统并修改您的密码。如果您对本次重置密码操作有疑问,请联系系统管理员。</span></p>\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">此致</span></p>\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">车联网业务支撑平台</span></p>\\r\\n <p>\\r\\n <span style=\\\"color: rgb(0, 102, 255);\\\">\\r\\n <br></span>\\r\\n </p>\\r\\n </div>\\r\\n</div>\",\n" +
"\t\"templateName\": \"模板名称\",\n" +
"\t\"updateTime\": 1587546284000\n" +
"}";
EmailTemplate emailTemplate = null;
try {
emailTemplate = mapper.readValue(json, EmailTemplate.class);
Map<String, Object> jsonMap = JSONObject.toJavaObject((JSON)JSON.toJSON(emailTemplate), Map.class);
if(emailTemplate == null){
return ;
}
//替换文言
Map<String,Object> mapWenYan= new HashMap<>(16);
Map<String,Object> handleWord = (Map<String, Object>) map.get("replaceWord");
Iterator it = handleWord.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry) it.next();
mapWenYan.put((String)entry.getKey(), entry.getValue());
}
String generateString = FreemarkerUtils.generateString(mapWenYan, emailTemplate.getTemplateHtml());
//发送邮件
MailUtil.sendMail((String)map.get("toEmilAddress"), generateString, emailTemplate.getEmailSubject(), (String)map.get("carbonCopyEmail"));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(emailTemplate);
}
}