读书人

运用FreeMarker邮件模版来发送邮件

发布时间: 2012-06-28 15:20:03 作者: rapoo

使用FreeMarker邮件模版来发送邮件

<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属性。

?

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 blocke.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 stubApplicationContext ctx = new FileSystemXmlApplicationContext( "src/applicationContext.xml"); TemplateEmailService ms=(TemplateEmailService) ctx.getBean("templateEmail");//发送模板邮件ms.sendTemplateMail("yefriend");}//end method}

?

6.3 applicationContext.xml配置文件?

<bean id="freeMarker" 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" ref="mailsender"></property>    <property name="freeMarkerConfigurer" ref="freeMarker"></property></bean> 
?

?

public String getMailHtml(Map map, String templateName) { String htmlText = null; try {Template tpl = freeMarkerConfigurer.getConfiguration().getTemplate(templateName);htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(tpl, map); } catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();} return htmlText; }

?这样就可以如下获取数据:

Map<String,Object> map = amendEmailUtils.initAmendPendingEmailMap(hotelbookheader...);String html = mailSender.getMailHtml(map, "amendmentPending.ftl");

?

如果发件人固定,我们还可以让TemplateEmailService 继承org.springframework.mail.SimpleMailMessage这个类,以使用其中的From或to属性

我的类:

public class SimpleMailSender extends SimpleMailMessage {     private JavaMailSender sender;    private MimeMessageHelper messageHellper;    private FreeMarkerConfigurer freeMarkerConfigurer; 

?使用:

//类属性public SimpleMailSender mailSender;//方法中Map<String,Object> map = amendEmailUtils.initAmendPendingEmailMap(hotelbookheader...);String html = mailSender.getMailHtml(map, "amendmentPending.ftl");MimeMessage mimeMessage = mailSender.GetSender().createMimeMessage();MimeMessageHelper messageHellper = new MimeMessageHelper(mimeMessage, true, "utf-8");messageHellper.setSubject(amendSubjectToUser);messageHellper.setFrom(mailSender.getFrom());//如果不继承,自定义类SimpleMailSender中就无from、to方法,就不可从配置文件中获取

?

xml配置:

<bean id="mailSender"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" 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"name="code">MimeMessage message = mailSender.GetSender().createMimeMessage();MimeMessageHelper messageHellper = new MimeMessageHelper(message, true, "utf-8");messageHellper.setSubject(subject);messageHellper.setFrom(formMap.get("couemail") + "");messageHellper.setFrom(sender);Multipart mp = new MimeMultipart();  MimeBodyPart mbp = new MimeBodyPart();   File file = new File("E:\\hotel_" + filename + ".xls");FileDataSource fds=new FileDataSource(file);       mbp.setDataHandler(new DataHandler(fds));        mbp.setFileName(fds.getName());       mp.addBodyPart(mbp);              message.setContent(mp);      message.saveChanges();

?发送成功后可使用

fds.getFile().delete();

?删除文件!

?

参考:http://freeman983.iteye.com/blog/208586

或:

String path = ServletActionContext.getServletContext().getRealPath("/download/");String destinct = path + "/" + fileName + ".zip";Resource file = new ServletContextResource(ServletActionContext.getServletContext(),destinct);helper.addAttachment("hotel_nh_"+countryCode + ".zip", file.getFile());或: message.addAttachment("myDocument.pdf", new ClassPathResource("doc/myDocument.pdf"));

?。。。

详细参考:http://hi.baidu.com/sleep651/blog/item/90cbcd4635af6b046b63e5a4.html

读书人网 >软件架构设计

热点推荐