java使用自定义HTML模板发送email

VO接收参数

@Data
public class EmailVo {@ApiModelProperty("收件人列表")@NotNull(message = "收件人列表为空")private List<String> tos;@ApiModelProperty("抄送人列表")private List<String> ccs;@ApiModelProperty("邮件标题")@NotNull(message = "邮件标题为空")private String subject;@ApiModelProperty("项目编码")@NotNull(message = "项目编码为空")private String projectCode;@ApiModelProperty("模板代码")@NotNull(message = "模板代码为空")private String templateCode;@ApiModelProperty("HTML模板参数")private Map<String,Object> templateParameters;
}

该html模板应需求为数据库表动态配置,也可写死为html文件放在resource

@Slf4j
@Service("emailService")
public class EmailServiceImpl implements EmailService {@Autowiredprivate JavaMailSender mailSender;@Autowiredprivate HtmlTemplateDao htmlTemplateDao;@Value("${mail.from}")private String from;/*** XXXX-发送邮件统一接口* @param emailVo* @param request* @return*/@Overridepublic CommonResponse sendEmails(EmailVo emailVo, HttpServletRequest request) {if(emailVo.getTos().size() == 0){return CommonResponse.createValidateErrorResponse();}String[] tos = new String[emailVo.getTos().size()];for (int i = 0; i < emailVo.getTos().size(); i++) {if(isEmail(emailVo.getTos().get(i))){tos[i] = emailVo.getTos().get(i);}}try {MimeMessage message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(tos);//发送抄送人if(emailVo.getCcs() != null && emailVo.getCcs().size() != 0){String[] ccs = new String[emailVo.getCcs().size()];for (int i = 0; i < emailVo.getCcs().size(); i++) {if(isEmail(emailVo.getCcs().get(i))){ccs[i] = emailVo.getCcs().get(i);}}helper.setCc(ccs);}helper.setSubject(emailVo.getSubject());//查询html模板String htmlText = null;EntityWrapper<HtmlTemplate> wrapper = new EntityWrapper<>();wrapper.eq("cancelsign","n").eq("project_code",emailVo.getProjectCode()).eq("template_code",emailVo.getTemplateCode());List<HtmlTemplate> htmlTemplates = htmlTemplateDao.selectList(wrapper);if(htmlTemplates.size() > 0){htmlText = htmlTemplates.get(0).getHtmlTemplate();}else{return CommonResponse.createValidateErrorResponse();}helper.setText(buildContent(htmlText,emailVo.getTemplateParameters()), true);mailSender.send(message);} catch (Exception e) {log.error("XXXX-发送邮件失败:email={},logs={}", emailVo.toString(),e.getMessage());return CommonResponse.createValidateErrorResponse();}log.info("XXXX-发送邮件成功:email={}", emailVo.toString());return CommonResponse.createCommonResponse();}/*** 获取html模板,填充html模板中的动态参数* @param htmlText* @param templateParameters* @return*/private String buildContent(String htmlText, Map<String,Object> templateParameters){if(!templateParameters.isEmpty() && templateParameters != null){for (Map.Entry<String, Object> entry : templateParameters.entrySet()) {htmlText = htmlText.replace("{"+entry.getKey()+"}", entry.getValue().toString());}}//改变表格样式htmlText = htmlText.replaceAll("<td>", "<td style=\"padding:6px 10px; line-height: 150%;\">");htmlText = htmlText.replaceAll("<tr>", "<tr style=\"border-bottom: 1px solid #eee; color:#666;\">");return htmlText;}/*** 判断邮箱合法性* @param string* @return*/public boolean isEmail(String string) {if (string == null)return false;String regEx1 = "^([a-z0-9A-Z]+[_-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";Pattern p;Matcher m;p = Pattern.compile(regEx1);m = p.matcher(string);if (m.matches())return true;elsereturn false;}
}

html例子

<body style="color: #666; font-size: 14px; font-family: 'Open Sans',Helvetica,Arial,sans-serif;">
<div class="box-content" style="width: 80%; margin: 20px auto; max-width: 800px; min-width: 600px;"><div class="info-top" style="padding: 15px 25px;border-top-left-radius: 10px;border-top-right-radius: 10px;background: #00549f;color: #fff;overflow: hidden;line-height: 32px;"><div style="font-size: 35px;text-align: center;color:#010e07"><strong>XXIT平台</strong></div></div><div class="info-wrap" style="border-bottom-left-radius: 10px;border-bottom-right-radius: 10px;border:1px solid #ddd;overflow: hidden;padding: 15px 15px 20px;"><div class="tips" style="padding:15px;"><p style=" list-style: 160%; margin: 10px 0;">Dear {greetName},</p><p style=" list-style: 160%; margin: 10px 0;">{content}</p></div><div class="time" style="text-align: right; color: #999; padding: 0 15px 15px;">签名:{sign}</div><br></div>
</div>
</body>

配置文件

mail.from = ${mail_from:XXX}
spring.mail.host = ${spring_mail_host:XXX}
spring.mail.username = ${spring_mail_username:XXX}
spring.mail.password = ${spring_mail_password:XXX}
spring.mail.port= ${spring_mail_port:XXX}
spring.mail.properties.mail.smtp.auth = ${spring_mail_properties_mail_smtp_auth:false}
spring.mail.properties.mail.smtp.starttls.enable = ${spring_mail_properties_mail_smtp_starttls_enable:false}
spring.mail.properties.mail.smtp.starttls.required = ${spring_mail_properties_mail_smtp_starttls_required:false}
spring.mail.default-encoding = ${spring_mail_default-encoding:UTF-8}

java使用自定义HTML模板发送邮件——记录开发篇1相关推荐

  1. Java使用自定义Excel模板填充数据

    Java使用自定义Excel模板填充数据 上期我们说到使用POI简单的制作一个Excel,这里我们教林外一种方法,就是把Excel写好定为模板,直接填充数据. 老样子还是要添加POM依赖 <de ...

  2. 【微信小程序】【云开发模板】云开发篇(五)——自定义初始化云开发模板(供直接下载源码)

    [微信小程序]云开发篇(一)--申请小程序 [微信小程序]云开发篇(二)--初始化云开发(微信开发者工具) [微信小程序]云开发篇(三)--代码管理 [微信小程序]云开发篇(四)--开通云开发 [微信 ...

  3. java 实现自定义数据模板下载Execl

    先看看我们要实现的效果图 1:导入maven依赖 <dependency><groupId>cn.hutool</groupId><artifactId> ...

  4. java发送小程序模板消息,记录_小程序发送模板消息

    package com.mj.frame.entity.resp; import java.io.Serializable; import java.util.List; import java.ut ...

  5. 我的世界JAVA版编程语言_Java版版本记录/开发版本

    此页面并非官方版本记录或更新日志.官方日志请见Minecraft官网. 关于1.11及此前版本,请见Mojang官网. 关于Beta 1.8及此前版本,请见Notch的博客,Word of Notch ...

  6. Java用于下载Excel模板的接口(小白篇)

    下载Excel模板的接口(最无脑的小白篇) try {//获取要下载的模板名称String fileName = "TemplateDate.xlsx";//设置头文件respon ...

  7. java table集合_Java集合类汇总记录--guava篇

    BiMap HashBiMap 实现了两份哈希表数据结构(本类独立实现),分别负责两个方向的映射. EnumBiMap 两个EnumMap对象分别负责两个方向的映射. EnumHashBiMap 一个 ...

  8. java服务器发送邮件_服务器通过模板发送邮件java代码

    //文件读取类 public class TemplateFileRead { private String content= null; public TemplateFileRead() { } ...

  9. java自定义表单系统_自定义表单二次开发

    自定义表单二次开发 === 自定义表单的页面和业务逻辑增强采用JS增强和Java增强实现.![输入图片说明](https://static.oschina.net/uploads/img/201804 ...

最新文章

  1. 麻省理工选出的全球十大突破性技术
  2. Android Jetpack组件之 LiveData使用-源码
  3. Matlab与C/C++混合编程接口及应用
  4. 基于CentOS7.3构建企业级Vsftpd文件服务器
  5. Eclipse 编码常用技巧【不断补充完善】
  6. ROS教程(七):定时器
  7. android checkboxpreference属性,如何更改android中CheckBoxPreference标题的文本颜色?
  8. 关于手心输入法配置完整自然码辅码
  9. Base64Utils 快速使用
  10. 解决Android studio 导入工程慢的方法
  11. android粘性广播何时结束,Android之粘性广播理解
  12. Altium designer--软件简介及安装教程(AD)
  13. 西瓜视频直播助手下载与安装过程 0523
  14. 布隆过滤器(Bloom Filter)
  15. Java安全-注入漏洞(SQL注入、命令注入、表达式注入、模板注入)
  16. 中国海洋大学计算机学院在哪个校区,中国海洋大学校区有几个 地址是什么
  17. 复杂业务流程的分析与拆分
  18. 多套头像/壁纸/背景图资源微信小程序源码 粉色UI 带流量主
  19. mosaic系列板卡,通用针脚与诺瓦塔OEM板卡天宝MB2、BD990及常见20pin、24pin、28pin底板轻松适配
  20. 一文读懂高通苹果专利战背后的专利常识

热门文章

  1. 在git clone报错
  2. cmd命令打开文本文档_Windows10家庭版打开「本地组策略」
  3. php redis访问量,redis实现点击量浏览量
  4. 区块链可以减少社会不平等吗?
  5. 微课竞赛系统的设计与实现所需工作条件_启升微课丨从软件设计开发着手准备医疗器械软件描述文档...
  6. 分类效果评价(机器学习)
  7. win10上VMware虚拟机设置固定IP地址
  8. c#取消word修订痕迹_法律人必备的WORD技能,从1.0到2.0丨星瀚技术派
  9. 中介/代理,正/反向代理,直/间接代理,概念清晰解释
  10. excel 计算机职称,职称计算机2017年Excel知识点:工作表的编辑