Spring发送邮件(三)—使用邮件模板来创建邮件

六、使用邮件模板来创建邮件

   FreeMarker是一个被广泛使用的模板框架,Spring可以很好的支持该框架。Spring为FreeMarker提供了一个FreeMarkerConfigurer类,通过此类可方便地创建FreeMarker的基础环境,Spring提供FreeMarkerTemplateUtils工具类来完成解析模板的任务。

   下面以用户注册成功后发送的模板文件registerUser.ftl,将该文件放在src/mailTemplate下:

6.1 模板文件 

  

Html代码 复制代码
  1. <html>  
  2.    <head>  
  3.       <meta http-equiv="content-type" content="text/html;charset=utf8">  
  4.    </head>  
  5.    <body>  
  6.        恭喜您成功注册!您的用户名为:<font color='red' size='30'>${username}</font>  
  7.    </body>  
  8. </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模板技术构造邮件内容

   

Java代码 复制代码
  1. package com.bb.spring.email;   
  2. import org.springframework.ui.freemarker.*;   
  3. import org.springframework.web.servlet.view.freemarker.*;   
  4. import freemarker.template.*;   
  1. import ......   
  2. public class TemplateEmailService {   
  3.     private JavaMailSender sender;   
  4.     private FreeMarkerConfigurer freeMarkerConfigurer=null;//FreeMarker的技术类   
  5.        
  6.     public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {   
  7.         this.freeMarkerConfigurer = freeMarkerConfigurer;   
  8.     }   
  9.        
  10.     public void setSender(JavaMailSender sender) {   
  11.         this.sender = sender;   
  12.     }   
  13.   
  14.     //通过模板构造邮件内容,参数username将替换模板文件中的${username}标签。   
  15.     private String getMailText(String username){   
  16.         String htmlText="";   
  17.         try {   
  18.             //通过指定模板名获取FreeMarker模板实例   
  19.             Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate("registerUser.ftl");   
  20.             //FreeMarker通过Map传递动态数据   
  21.             Map map=new HashMap();   
  22.             map.put("username",username); //注意动态数据的key和模板标签中指定的属性相匹配   
  23.             //解析模板并替换动态数据,最终username将替换模板文件中的${username}标签。   
  24.             htmlText=FreeMarkerTemplateUtils.processTemplateIntoString(tpl,map);   
  25.         } catch (Exception e) {   
  26.             // TODO Auto-generated catch block   
  27.             e.printStackTrace();   
  28.         }   
  29.         return htmlText;   
  30.     }   
  31.        
  32.     //发送模板邮件   
  33.     public void sendTemplateMail(String username) throws MessagingException{   
  34.         MimeMessage msg=sender.createMimeMessage();   
  35.         MimeMessageHelper helper=new MimeMessageHelper(msg,false,"utf8");//由于是html邮件,不是mulitpart类型   
  36.         helper.setFrom("dongsanbo@sina.com");   
  37.         helper.setTo("dongsanbo@sina.com");   
  38.         helper.setSubject("注册成功-模板邮件");   
  39.         String htmlText=getMailText(username);//使用模板生成html邮件内容   
  40.         helper.setText(htmlText, true);   
  41.            
  42.         sender.send(msg);   
  43.         System.out.println("成功发送模板邮件");   
  44.     }   
  45.     public static void main(String[] args) throws MessagingException {   
  46.         // TODO Auto-generated method stub   
  47.         ApplicationContext ctx = new FileSystemXmlApplicationContext(      
  48.         "src/applicationContext.xml");    
  49.         TemplateEmailService ms=(TemplateEmailService) ctx.getBean("templateEmail");   
  50.            
  51.         //发送模板邮件   
  52.         ms.sendTemplateMail("yefriend");   
  53.     }//end method   
  54. }  

package com.bb.spring.email; import org.springframework.ui.freemarker.*; import org.springframework.web.servlet.view.freemarker.*; import freemarker.template.*; import ...... public class TemplateEmailService { private JavaMailSender sender; private FreeMarkerConfigurer freeMarkerConfigurer=null;//FreeMarker的技术类 public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) { this.freeMarkerConfigurer = freeMarkerConfigurer; } public void setSender(JavaMailSender sender) { this.sender = sender; } //通过模板构造邮件内容,参数username将替换模板文件中的${username}标签。 private String getMailText(String username){ String htmlText=""; try { //通过指定模板名获取FreeMarker模板实例 Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate("registerUser.ftl"); //FreeMarker通过Map传递动态数据 Map map=new HashMap(); map.put("username",username); //注意动态数据的key和模板标签中指定的属性相匹配 //解析模板并替换动态数据,最终username将替换模板文件中的${username}标签。 htmlText=FreeMarkerTemplateUtils.processTemplateIntoString(tpl,map); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return htmlText; } //发送模板邮件 public void sendTemplateMail(String username) throws MessagingException{ MimeMessage msg=sender.createMimeMessage(); MimeMessageHelper helper=new MimeMessageHelper(msg,false,"utf8");//由于是html邮件,不是mulitpart类型 helper.setFrom("dongsanbo@sina.com"); helper.setTo("dongsanbo@sina.com"); helper.setSubject("注册成功-模板邮件"); String htmlText=getMailText(username);//使用模板生成html邮件内容 helper.setText(htmlText, true); sender.send(msg); System.out.println("成功发送模板邮件"); } public static void main(String[] args) throws MessagingException { // TODO Auto-generated method stub ApplicationContext ctx = new FileSystemXmlApplicationContext( "src/applicationContext.xml"); TemplateEmailService ms=(TemplateEmailService) ctx.getBean("templateEmail"); //发送模板邮件 ms.sendTemplateMail("yefriend"); }//end method }

 

 

 

 

6.3 applicationContext.xml配置文件

 

 

   

Xml代码 复制代码
  1. <bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
  2.   <property name="templateLoaderPath" value="classpath:mailTemplate"/><!--指定模板文件目录-->    
  3.   <property name="freemarkerSettings"><!-- 设置FreeMarker环境属性-->    
  4.       <props>  
  5.           <prop key="template_update_delay">1800</prop><!--刷新模板的周期,单位为秒-->    
  6.           <prop key="default_encoding">UTF-8</prop><!--模板的编码格式 -->  
  7.           <prop key="locale">zh_CN</prop><!-- 本地化设置-->  
  8.       </props>  
  9.   </property>  
  10. </bean>  
  11. <bean id="templateEmail" class="com.bb.spring.email.TemplateEmailService">  
  12.     <property name="sender" ref="mailsender"></property>  
  13.     <property name="freeMarkerConfigurer" ref="freeMarker"></property>  
  14. </bean>   

<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}。

源地址:http://yefriendly.iteye.com/blog/404358

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值