Spring为FreeMarker提供了一个FreeMarkerConfigurer类,通过此类可方便地创建FreeMarker的基础环境,Spring提供FreeMarkerTemplateUtils工具类来完成解析模板的任务。
spring配置文件中bean的配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config /> <context:component-scan base-package="com.chinacache" /> <bean id="fm" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="classpath:template"/> //模板所有目录 <property name="freemarkerSettings"> <props> <prop key="template_update_delay">3600</prop> //自动刷新 <prop key="default_encoding">UTF-8</prop> <prop key="locale">zh_CN</prop> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> </props> </property> </bean> </beans>
maven包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.9</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.3</version> </dependency>
java
Map<Object, Object> map = new HashMap<Object, Object>();
map.put("buTopchannels", channel);
map.put("retract", retract);
map.put("OperationTime", channel.get(0).getOperationTime());
map.put("title", title);
map.put("salesDirector", channel.get(0).getSalesDirector());
freemarker.template.Template mailTemplate;
String content = null;
try {
mailTemplate = fm.getConfiguration().getTemplate("channel_mail_su.ftl");
content = FreeMarkerTemplateUtils.processTemplateIntoString(mailTemplate, map);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
ftl
<head>
<style type="text/css">
table {border:solid #add9c0; border-width:0px 1px 1px 0px;
}
td {border:solid #add9c0; border-width:0px 1px 1px 0px; padding:10px 0px;
}
</style>
</head>
<body>
Hi all:${retract}操作时间:${OperationTime}${retract} 公司转出/测试频道带宽总量大约为[${allBandwidth}],超过[${thresholdValue}]的占其中的[${allpercent}]${retract}[${bu}转出/测试频道带宽总量大约为[${buBandwidth}],超过[${thresholdValue}]的占其中的[${bupercent}]<br> ${retract}<font color='red'>第一负责人是:${DutyAdvocate}</font><br>${retract}<font color='red'>备份负责人是:${DutyBack}.</font><br>前[${buTopSize}]的分别是${retract}
<table >
<thead>
<tr>
<th>bu</th>
<th>频道</th>
<th>用户</th>
<th>${title}时间</th>
<th>峰值</th>
<th>流量</th>
<th>销售</th>
<th>客服</th>
<th>频道状态</th>
</tr>
</thead>
<tbody>
<#list buTopchannels as channel>
<tr>
<td>${channel.bu}</td>
<td>${channel.channelName}</td>
<td>${channel.customerName}</td>
<td>${channel.channelTransferTime}</td>
<td>${channel.maxBandwidthStr}</td>
<td>${channel.fluxStr}</td>
<td>${channel.salesDirector}</td>
<td>${channel.customerDirector}</td>
<td>${channel.state}</td>
</tr>
</#list>
</tbody>
</table>
<br><br><br><br><br>如有程序bug请与snp[高保宗]联系
</body>
</html>
转自其它博客的:
Spring为FreeMarker提供了一个FreeMarkerConfigurer类,通过此类可方便地创建FreeMarker的基础环境,Spring提供FreeMarkerTemplateUtils工具类来完成解析模板的任务。
下面以用户注册成功后发送的模板文件registerUser.ftl,将该文件放在src/mailTemplate下:
6.1 模板文件
- <html>
- <head>
- <meta http-equiv="content-type" content="text/html;charset=utf8">
- </head>
- <body>
- 恭喜您成功注册!您的用户名为:<font color='red' size='30'>${username}</font>
- </body>
- </html>
- <html>
- <head>
- <meta http-equiv="content-type" content="text/html;charset=utf8">
- </head>
- <body>
- 恭喜您成功注册!您的用户名为:<font color='red' size='30'>${username}</font>
- </body>
- </html>
上面的${username}标签代表一个可被替换的动态属性。FreeMarker模板的标签支持级联属性,如${user.Id}则表示user对象的Id属性。
6.2 使用FreeMarker模板技术构造邮件内容
6.3 applicationContext.xml配置文件
- <bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
- <property name="templateLoaderPath" value="classpath:mailTemplate"/><!--指定模板文件目录-->
- <property name="freemarkerSettings"><!-- 设置FreeMarker环境属性-->
- <props>
- <prop key="template_update_delay">1800</prop><!--刷新模板的周期,单位为秒-->
- <prop key="default_encoding">UTF-8</prop><!--模板的编码格式 -->
- <prop key="locale">zh_CN</prop><!-- 本地化设置-->
- </props>
- </property>
- </bean>
- <bean id="templateEmail" class="com.bb.spring.email.TemplateEmailService">
- <property name="sender" ref="mailsender"></property>
- <property name="freeMarkerConfigurer" ref="freeMarker"></property>
- </bean>
在配置文件中已设置好模板目录,所以可在类中直接用模板文件名来定位模板文件。模板文件用UTF-8编码格式,避免中文乱码。通过设置template_update_delay属性,可让FreeMarker定期刷新模板,从而使应用程序在不重启下更新模板。
至此,可以运行TemplateEmailService类发送邮件,实验表明"yefriend"将替换${username}。
下面是自己的扩展:
实际项目中我们想要动态的指定数据源和模版,就需要如下构造获取方法:
这样就可以如下获取数据:
如果发件人固定,我们还可以让TemplateEmailService 继承org.springframework.mail.SimpleMailMessage这个类,以使用其中的From或to属性
我的类:
- public class SimpleMailSender extends SimpleMailMessage {
- private JavaMailSender sender;
- private MimeMessageHelper messageHellper;
- private FreeMarkerConfigurer freeMarkerConfigurer;
使用:
xml配置:
- <bean id="mailSender"
- class="com.techson.himsnanhwa.admin.mail.SimpleMailSender">
- <property name="javaMailSender"><ref bean="sender"/></property>
- <property name="freeMarkerConfigurer" ref="freeMarker"></property>
- <property name="from">
- <value>wy@techson.com.hk</value>
- </property>
- <property name="to">
- <value>ming@techson.com.hk</value>
- </property>
- </bean>
- <!--配置邮件模板-->
- <bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
- <property name="templateLoaderPath" value="/mailTemplete"/>
- <property name="freemarkerSettings">
- <props>
- <prop key="template_update_delay">15</prop>
- <prop key="default_encoding">UTF-8</prop>
- <prop key="locale">zh_CN</prop>
- </props>
- </property>
- </bean>
- <bean id="sender"
- class="org.springframework.mail.javamail.JavaMailSenderImpl">
- <property name="host">
- <value>192.168.108.6</value>
- </property>
- <property name="javaMailProperties">
- <props>
- <prop key="mail.smtp.auth">true</prop>
- <prop key="mail.smtp.timeout">25000</prop>
- </props>
- </property>
- <property name="username">
- <value>wy</value>
- </property>
- <property name="password">
- <value>wy</value>
- </property>
- </bean>
。。。
发送带附件的邮件:
发送成功后可使用
- fds.getFile().delete();
删除文件!
或:
。。。