`
yanghuw
  • 浏览: 13297 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

Spring中使用FreeMaker或Vilocity模板发送邮件

阅读更多
        本文以用户注册后为用户发送一封邮件为例子,讲述如何在Spring中使用FreeMaker或Vilocity发送邮件。

       Spring配置文件:
xml 代码
  1. <!---->  
  2.     <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">  
  3.         <property name="host" value="smtp.163.com"/>  
  4.         <property name="username" value="test"/>  
  5.         <property name="password" value="123456"/>  
  6.         <property name="javaMailProperties">  
  7.               <props>  
  8.                 <prop key="mail.smtp.auth">trueprop>  
  9.               props>  
  10.         property>  
  11.     bean>  
  12.   
  13.     <!---->  
  14.     <bean id="freeMarkerConfigurer"                    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
  15.         <property name="templateLoaderPath" value="/WEB-INF/freemakertemplate/" />  
  16.         <property name="freemarkerSettings">  
  17.             <props>  
  18.                 <prop key="template_update_delay">0prop>  
  19.                 <prop key="default_encoding">GBKprop>  
  20.                 <prop key="locale">zh_CNprop>  
  21.             props>  
  22.         property>  
  23.     bean>  
  24.        
  25.     <!---->  
  26.     <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">  
  27.         <property name="resourceLoaderPath" value="/WEB-INF/vilocitytemplate/" />  
  28.         <property name="velocityProperties">  
  29.             <props>  
  30.                 <prop key="velocimacro.library">*.vmprop>  
  31.                 <prop key="default.contentType">text/html; charset=utf-8prop>  
  32.                 <prop key="output.encoding">utf-8prop>  
  33.                 <prop key="input.encoding">utf-8prop>  
  34.             props>  
  35.         property>  
  36.     bean>  
  37.        
  38.      <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage" singleton="false">  
  39.         <property name="from" value="test@163.com"/>  
  40.     bean>  
  41.        
  42.     <bean id="mailEngine" class="test.MailEngine">  
  43.         <property name="mailSender" ref="mailSender"/>  
  44.         <!---->  
  45.         <property name="velocityEngine" ref="velocityEngine"/>  
  46.        <!---->  
  47.        <property name="freeMarkerConfigurer" ref="freeMarkerConfigurer" />  
  48.     bean>  
    
 
   
java 代码
  1.  MailEngine类:   
  2.   
  3. public class MailEngine {   
  4.     protected static final Log log = LogFactory.getLog(MailEngine.class);   
  5.   
  6. //    private FreeMarkerConfigurer freeMarkerConfigurer;   
  7.     private VelocityEngine velocityEngine;   
  8.     private MailSender mailSender;   
  9.   
  10. //    public void setFreeMarkerConfigurer(   
  11. //            FreeMarkerConfigurer freeMarkerConfigurer) {   
  12. //        this.freeMarkerConfigurer = freeMarkerConfigurer;   
  13. //    }   
  14.   
  15.     public void setMailSender(MailSender mailSender) {   
  16.         this.mailSender = mailSender;   
  17.     }   
  18.   
  19.     public void setVelocityEngine(VelocityEngine velocityEngine) {   
  20.         this.velocityEngine = velocityEngine;   
  21.     }   
  22.   
  23.     /**  
  24.      * 通过模板产生邮件正文  
  25.      * @param templateName    邮件模板名称  
  26.      * @param map            模板中要填充的对象  
  27.      * @return 邮件正文(HTML)  
  28.      */  
  29.     public String generateEmailContent(String templateName, Map map) {   
  30.         //使用FreeMaker模板   
  31. //        try {   
  32. //            Configuration configuration = freeMarkerConfigurer.getConfiguration();   
  33. //            Template t = configuration.getTemplate(templateName);   
  34. //            return FreeMarkerTemplateUtils.processTemplateIntoString(t, map);   
  35. //        } catch (TemplateException e) {   
  36. //            log.error("Error while processing FreeMarker template ", e);   
  37. //        } catch (FileNotFoundException e) {   
  38. //            e.printStackTrace();   
  39. //            //log.error("Error while open template file ", e);   
  40. //        } catch (IOException e) {   
  41. //            log.error("Error while generate Email Content ", e);   
  42. //        }   
  43.            
  44. //        使用Vilocity模板   
  45.         try {   
  46.            return VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, templateName, map);   
  47.         } catch (VelocityException e) {   
  48.             log.error("Error while processing Vilocity template ", e);   
  49.         }   
  50.            
  51.         return null;   
  52.     }   
  53.   
  54.     /**  
  55.      * 发送邮件  
  56.      * @param emailAddress        收件人Email地址的数组  
  57.      * @param fromEmail            寄件人Email地址, null为默认寄件人web@vnvtrip.com  
  58.      * @param bodyText            邮件正文  
  59.      * @param subject            邮件主题  
  60.      * @param attachmentName    附件名  
  61.      * @param resource            附件  
  62.      * @throws MessagingException  
  63.      */  
  64.     public void sendMessage(String[] emailAddresses, String fromEmail,   
  65.             String bodyText, String subject, String attachmentName,   
  66.             ClassPathResource resource) throws MessagingException {   
  67.         MimeMessage message = ((JavaMailSenderImpl) mailSender)   
  68.                 .createMimeMessage();   
  69.   
  70.         // use the true flag to indicate you need a multipart message   
  71.         MimeMessageHelper helper = new MimeMessageHelper(message, true);   
  72.   
  73.         helper.setTo(emailAddresses);   
  74.         if(fromEmail != null){   
  75.             helper.setFrom(fromEmail);   
  76.         }   
  77.         helper.setText(bodyText, true);   
  78.         helper.setSubject(subject);   
  79.            
  80.         if(attachmentName!=null && resource!=null)   
  81.             helper.addAttachment(attachmentName, resource);   
  82.   
  83.         ((JavaMailSenderImpl) mailSender).send(message);   
  84.     }   
  85.   
  86.     /**  
  87.      * 发送简单邮件  
  88.      * @param msg      
  89.      */  
  90.     public void send(SimpleMailMessage msg) {   
  91.         try {   
  92.             ((JavaMailSenderImpl) mailSender).send(msg);   
  93.         } catch (MailException ex) {   
  94.             //log it and go on   
  95.             log.error(ex.getMessage());   
  96.         }   
  97.     }   
  98.        
  99.     /**  
  100.      * 使用模版发送HTML格式的邮件  
  101.      *  
  102.      * @param msg          装有to,from,subject信息的SimpleMailMessage  
  103.      * @param templateName 模版名,模版根路径已在配置文件定义于freemakarengine中  
  104.      * @param model        渲染模版所需的数据  
  105.      */  
  106.     public void send(SimpleMailMessage msg, String templateName, Map model) {   
  107.         //生成html邮件内容   
  108.         String content = generateEmailContent(templateName, model);   
  109.         MimeMessage mimeMsg = null;   
  110.         try {   
  111.             mimeMsg = ((JavaMailSenderImpl) mailSender).createMimeMessage();   
  112.             MimeMessageHelper helper = new MimeMessageHelper(mimeMsg, true"utf-8");   
  113.             helper.setTo(msg.getTo());   
  114.                
  115.             if(msg.getSubject()!=null)   
  116.                 helper.setSubject(msg.getSubject());   
  117.                
  118.             if(msg.getFrom()!=null)   
  119.                 helper.setFrom(msg.getFrom());   
  120.                
  121.             helper.setText(content, true);   
  122.                
  123.             ((JavaMailSenderImpl) mailSender).send(mimeMsg);   
  124.         } catch (MessagingException ex) {   
  125.             log.error(ex.getMessage(), ex);   
  126.         }   
  127.   
  128.     }   
  129. }   
  130.   
  131. 发送邮件:   
  132. SimpleMailMessage message = (SimpleMailMessage) getBean("mailMessage");   
  133.                 message.setTo(user.getName() + "<" + user.getEmail() + ">");   
  134.                    
  135.                 Map model = new HashMap();   
  136.                 model.put("user", user);   
  137.                    
  138.                 MailEngine engine = (MailEngine)getBean("mailEngine");   
  139.                 //Vilocity模板   
  140.                 engine.send(message, "notifyUser.vm", model);   
  141.                 //FreeMaker模板   
  142.                 //engine.send(message, "NotifyUser.ftl", model);   
  143.   
  144. 以上的User为用户类。  

 

xml 代码
  1. 模板:   
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">  
  5. <title>用户注册通知title>  
  6. head>  
  7. <body>  
  8. <p>${user.name} 您好,恭喜您,已经成为本站会员!p>  
  9. <table>  
  10. <tr><td>用户名:td><td>${user.name}td>tr>  
  11. <tr><td>密码:td><td>${user.password}td>tr>  
  12. table>  
  13. body>  
  14. html>  





 

分享到:
评论
4 楼 zcs_84 2012-11-08  
这是什么原因
3 楼 zcs_84 2012-11-08  
error using  VM library template *.vm : org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource '*.vm'
2 楼 zcs_84 2012-11-08  
指点下 谢谢
1 楼 zcs_84 2012-11-08  
你的项目能跑吗?
怎么进入:http://localhost/SendMail  报500

相关推荐

Global site tag (gtag.js) - Google Analytics