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();
删除文件!
或:
。。。