Spring邮件发送2
前言:上一篇博文讲解了邮件发送的基础用法(数据是写死的),然而在实际开发中,大多数情况下邮件内容都是根据业务来动态生成的。所以在此篇博文中,我们将讲解邮件发送携带数据的几种方案。
一、解析自定义占位符
实现方法: 通过解析自定义占位符,将传递到邮件中的数据,转换成html内容,进行发送。
1)占位符替换函数
/**
* Replaces place holder ("${}") string in template with values in Map
*
* @param template
* @param models
* @return
*/
public static String replacePlaceHolder(String template, Map<String, String> models) { if (template.indexOf("${") == -1) {
return template;
} while (true) { int start = template.indexOf("${");
int end = template.indexOf("}", start); if (start != -1 && end != -1) { String key = template.substring(start + 2, end); if (models.containsKey(key)) {
template = template.substring(0, start) + models.get(key) + template.substring(end + 1);
} } else {
break;
} } return template; }
2) 邮件发送Test-Case
// 1. Resolve html template to real text
String htmlTemplate = "<html lang='zh-cn'><head></head><body><h1>发送带模板数据的Email</h1><p>你好,${username}。本次您的验证码为${code},请妥善保管</p></body></html>"; Map<String, String> models = new HashMap<String, String>();
models.put("username", "XXX");
models.put("code", "4551"); String text = StringUtils.replacePlaceHolder(htmlTemplate, models); // 2. send email
boolean result = mailHandler.sendText("收件人邮箱", "发送带模板数据的Email", text);
Assert.assertEquals(true, result);
二、使用Velocity模板
实现方法:借用VelocityEngineUtils合并Velocity模板和数据,得到要发送的Email, 进行发送。
1) 引入依赖jar包
<!-- velocity -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
2) 配置Velocity模板引擎
<!-- Define velocity engine -->
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="configLocation" value="classpath:velocity.properties" />
</bean>
velocity.properties:
input.encoding=UTF-8
output.encoding=UTF-8
resource.loader=class
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
3) 发送邮件实现函数
// Get email content by velocity merge models
String content = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, template, encoding, models); // Send email
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, encoding);
helper.setFrom(form); // set sender
helper.setTo(to); // set recipients
helper.setSubject(subject);
helper.setText(content, true); // Indicate the text included is HTML
mailSender.send(mimeMessage);
三、使用FreeMarker模板
实现方法:借用FreeMarkerTemplateUtils合并FreeMarker模板和数据,得到要发送的Email, 进行发送。
1) 引入依赖jar包
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
2)配置FreeMarker
<!-- Define freemarker configuration -->
<bean id="freeMarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
<property name="templateLoaderPath" value="classpath:template/freemarker" />
<property name="defaultEncoding" value="utf-8" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">10</prop>
<prop key="locale">zh_CN</prop>
<prop key="number_format">#.##</prop>
</props>
</property>
</bean>
3) 发送邮件实现函数
// Get email content by freeMarker template
Template realTemplate = freeMarkerConfigurer.getTemplate(template);
String content = FreeMarkerTemplateUtils.processTemplateIntoString(realTemplate, models);
// Send email
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, encoding);
helper.setFrom(form); // set sender
helper.setTo(to); // set recipients
helper.setSubject(subject);
helper.setText(content, true); // Indicate the text included is HTML
mailSender.send(mimeMessage);
Spring邮件发送2的更多相关文章
- Spring 邮件发送
前言:以前都是直接用Java自带的邮件工具发送邮件,现在Spring帮我们做了封装,提供了更好用更简单的发送邮件工具JavaMailSender 关于邮件服务器的设置就不在这里说了,直接去QQ邮箱 ...
- java spring 邮件发送
开发中经常会遇到发送邮件进行用户验证,或者其它推送信息的情况,本文基于spring,完成邮件的发送,主要支持普通文本邮件的发送,html文本邮件的发送,带附件的邮件发送,没有实现群发.多个附件发送等需 ...
- Spring邮件发送1
注意:邮件发送code中,邮件服务器的申请和配置是比较主要的一个环节,博主这里用的是QQ的邮件服务器.有需要的可以谷歌.百度查下如何开通. 今天看了下Spring的官方文档的邮件发送这一章节.在这里记 ...
- spring邮件发送
1,Emaill类: package com.learn.jsp.pojo; /** * 邮件基本信息 * @author kevin * */public class Email { private ...
- Spring的javaMail邮件发送(带附件)
项目中经常用到邮件功能,在这里简单的做一下笔记,方便日后温习. 首先需要在配置文件jdbc.properties添加: #------------ Mail ------------ mail.smt ...
- 使用spring的邮件发送功能
使用spring提供的MailSender和JavaMailSender类. 1.邮件对象类 package cn.luxh.app.mail; import java.util.List; impo ...
- 使用Spring的JAVA Mail支持简化邮件发送(转)
闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是Mail ...
- Spring Boot 2.0 图文教程 | 集成邮件发送功能
文章首发自个人微信公众号: 小哈学Java 个人网站: https://www.exception.site/springboot/spring-boots-send-mail 大家好,后续会间断地奉 ...
- Spring Boot整合邮件发送
概述 Spring Boot下面整合了邮件服务器,使用Spring Boot能够轻松实现邮件发送:整理下最近使用Spring Boot发送邮件和注意事项: Maven包依赖 <dependenc ...
随机推荐
- RPC vs RESTful
在微服务中,使用什么协议来构建服务体系,一直是个热门话题. 争论的焦点集中在两个候选技术: (binary) RPC or Restful. 以Apache Thrift为代表的二进制RPC,支持多种 ...
- ATM+购物商城完整版
一,需求:模拟实现一个ATM + 购物商城程序 要求如下: 1.额度15000或者自定义 2.实现购物商城,买东西加入购物车,调用信用卡接口结账 3.可以提现,手续费5% 4.支持多账户登陆 5.支持 ...
- spring+springMVC 整合 MongoDB 实现注册登录
发现一入手 MongoDB,便无法脱离,简要说一下,MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 也是在 Nosql 中我最喜欢的一种 ...
- 你学会UI设计了吗?
你学会UI设计了吗? UI设计师如何前驱? 关于产品 作为一个UI设计师,我们还在干巴巴的等着产品经理甚至交互提供的需求和原型再开始动手吗?这样被动的工作是永远无法提升自己的,当然你也永远只能拿到几千 ...
- NEO从入门到开窗(3) - NEO编译器
一.啰嗦两句 第一节的时候咱说了C#编译完了之后,就该NEO的编译器搞事情了.我们完全可以按这个节奏搞,手动用NEO的编译器neon编译dll文件生成指令码文件.avm.但是NEO团队给我们写智能合约 ...
- Java面试宝典笔记录
1.一个.java文件中可以有多个类(不是内部类),但是只能有一个public类,且类名和文件同名.(一般不提倡这么写,一类一文件) 2.java保留字:goto, const. 3.访问权限控制 访 ...
- 笔记:MyBatis XML配置详解
MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 properties ...
- MYSQL数据库学习十一 多表数据记录查询
11.1 关系数据操作 并(UNION):把具有相同字段数目和字段类型的表合并到一起. 笛卡尔积(CARTESIAN PRODUCT):没有连接条件表关系的返回结果.字段数=table1字段数+tab ...
- Webpack结合ES6
一.概述ES6现在正是风华正茂的时候,各个公司都是 尝试去使用,并且作为前端工程师ES6也是体现技术的亮点.但是,现在的浏览器对es6支持不是 特别的兼容,最终还是需要把es6转换为es5,webpa ...
- Redis Setex命令
Redis SETEX命令用于在Redis键中的指定超时,设置键的字符串值. 返回值 字符串,如果在键中设置了值则返回OK.如果值未设置则返回 Null. 语法 下面是Redis SETEX命令的基本 ...