- 浏览: 6369966 次
- 性别:
- 来自: 一片神奇的土地
-
文章分类
- 全部博客 (745)
- JQuery (25)
- JS (33)
- 数据库 (59)
- Java基础 (56)
- JSON (8)
- XML (8)
- ireport (7)
- 设计模式 (10)
- 心情 (14)
- freemarker (1)
- 问题 (15)
- powerdesigner (2)
- CSS (15)
- DWR (4)
- tomcat (16)
- Hibernate (12)
- Oracle (7)
- Struts (7)
- Spring (34)
- JSP (23)
- 需学习 (64)
- 工具类库 (63)
- Maven (14)
- 笔试题 (34)
- 源码学习 (31)
- 多线程 (39)
- Android (32)
- 缓存 (20)
- SpringMVC (14)
- jQueryEasyUi (12)
- webservice-RPC (13)
- ant (1)
- ASP.NET (10)
- 正则表达式 (3)
- Linux (15)
- JBoss (1)
- EJB (3)
- UML (2)
- JMS (3)
- Flex (8)
- JSTL (2)
- 批处理 (5)
- JVM (16)
- 【工具】 (16)
- 数据结构 (29)
- HTTP/TCP/Socket (18)
- 微信 (1)
- tomcat源码学习 (15)
- Python (30)
- 主机 (2)
- 设计与架构 (19)
- thrift-RPC (2)
- nginx (6)
- 微信小程序 (0)
- 分布式+集群 (12)
- IO (1)
- 消息队列 (4)
- 存储过程 (8)
- redis (9)
- zookeeper (5)
- 海量数据 (5)
最新评论
-
360pluse:
技术更新,战术升级!Python爬虫案例实战从零开始一站通网盘 ...
Python爬虫实战:Scrapy豆瓣电影爬取 -
18335864773:
推荐用 pageoffice 组件生成 word 文件。
JAVA生成WORD工具类 -
jjhe369:
LISTD_ONE 写道起始地址为163.135.0.1 结束 ...
IP地址与CIDR -
baojunhu99:
private final int POOL_SIZE = 5 ...
使用CompletionService获取多线程返回值 -
LovingBaby:
胡说,javascript 运行时是单线程的,event lo ...
Ajax请求是否可以实现同步
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>
上面的${username}标签代表一个可被替换的动态属性。FreeMarker模板的标签支持级联属性,如${user.Id}则表示user对象的Id属性。
6.2 使用FreeMarker模板技术构造邮件内容
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配置文件
<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
下面是自己的扩展:
实际项目中我们想要动态的指定数据源和模版,就需要如下构造获取方法:
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" 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>
。。。
发送带附件的邮件:
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
评论
找到问题了
发表评论
-
Spring 配置多数据源实现数据库读写分离
2014-10-09 11:05 58249现在大型的电子商务 ... -
strust_spring_hibernate的优缺点
2014-10-08 09:41 2767struts框架具有组件的模块化,灵活性和重用性的优点,同时 ... -
声明式事务
2014-09-03 17:53 1791跟开涛学Spring 数据库事务 本 ... -
@Component注解
2014-08-20 15:43 37861Spring自带的@Component注 ... -
日志记录、性能监控的三种实现方式
2014-08-18 14:09 7662一、需解决的问题 部分API有签名参数(signatur ... -
BeanWrapper 设置和获取属性值
2014-08-18 11:10 97275.4. Bean处理和BeanWrapper - Spr ... -
SpringMVC的拦截器Interceptor
2014-08-15 10:23 5087跟开涛学SpringMVC 接口: Ha ... -
AOP
2014-08-14 17:00 10771跟开涛学Spring 问题: 使用BeanFac ... -
Bean作用域
2014-08-14 15:16 1817跟开涛学Spring 附:单例模式的DoubleChec ... -
DI
2014-08-14 10:26 1813跟开涛学Spring DI: ... -
IOC + 容器
2014-08-13 18:03 2930跟开涛学Spring 传统应用程序示意图 ... -
Spring中Bean初始化实例【重要】
2014-07-21 16:48 61263可参考文章: Spring Bean 生命周期 Spr ... -
bean的生命周期
2014-07-21 15:41 1536在spring中,从BeanFactory或Applica ... -
Spring中BeanPostProcessor
2014-07-21 15:19 50727Spring提供了很多扩展 ... -
context,listener,filter,servlet加载顺序
2014-04-22 14:08 8090web.xml加载过程(步骤):1.启动WEB项目的时候, ... -
Spring+hibernate的session问题
2013-09-27 10:20 3202在spring框架和hibernate框架集成的时候,根据 ... -
HttpServletRequestWrapper 用法
2013-09-25 16:50 8537HttpServletRequestWrapper ... -
AOP
2012-05-09 10:14 1634引子: AOP(面向方面 ... -
IOC
2012-05-09 10:11 1611引述:IoC(控制反转:I ... -
事务隔离级别
2012-03-08 11:39 10527模拟数据库的四种隔离级别1 模拟数据库的四种隔离级 ...
相关推荐
通过springboot 整合freemarker模板引擎,自动发送html格式邮件
标题“Spring使用Freemarker发送邮件的一个简单模板”指的是通过Spring的JavaMailSender接口和Freemarker模板来生成和发送邮件。首先,我们需要在项目中引入Spring和Freemarker的相关依赖,确保能够使用这两个库的...
1.这是一个在根目录下的mail.properties文件中配好发送邮件地址和接收邮箱地址的实例,利用freeMarker模板作为展示,在测试类中提供配固定接收邮箱地址和手动输入接收邮箱地址两种方法进行发送试验,结果都能实现...
在本示例中,我们将探讨如何使用Spring框架与FreeMarker模板引擎相结合,来实现一个功能丰富的电子邮件服务。这个服务能够发送HTML格式的邮件,其中包含内嵌的图片,并且能够处理附件,同时解决字符编码可能导致的...
以上就是使用JavaMail API结合FreeMarker模板发送邮件的基本步骤。你可以根据实际需求调整模板设计,或者使用其他模板引擎,如Thymeleaf或Velocity,它们的原理类似,只是语法和API略有不同。 注意,在生产环境中,...
你可以创建一个HTML模板文件,然后使用字符串替换或者Java模板引擎(如FreeMarker或Velocity)来生成最终的邮件内容。 总的来说,JavaMail API和Apache Commons Email为Java开发者提供了强大的邮件发送功能。通过...
该项目是一个基于Spring Boot和Apache Freemarker的电子邮件发送系统。它允许用户通过自定义电子邮件模板、附件等功能,向指定的电子邮件地址发送邮件。用户可以编辑项目资源文件夹中的'email.ftl'文件来个性化电子...
标题 "Spring+Freemarker 使用163发HTML格式的邮件" 描述的是一个使用Spring框架结合Freemarker模板引擎发送HTML格式邮件的过程。在这个场景中,开发人员可能需要通过编程方式向用户发送包含丰富格式内容的邮件,...
在实际应用中,你可能还需要考虑错误处理、邮件附件、多语言支持等问题,以及更复杂的模板引擎如FreeMarker或Velocity来动态生成HTML内容。希望这个概述能帮助你理解并实现自己的Java邮件发送功能。
采用javamail实现的通用邮件发送模块,邮件内容采用Freemarker技术实现,多线程实现邮件发送,观察者模式来定制邮件的错误处理,设计思路参考作者博客 http://blog.csdn.net/crazycoder2010/article/details/6629076
和上面对比,这次发送邮件使用 MimeMessageHelper 类。MimeMessageHelper 支持发送复杂邮件模板,支持文本、附件、HTML、图片等,接下来我们会继续使用。 (3)发送带附件的邮件 在 MailService 添加 ...