最近一直在自己学些东西,慢慢的发现其实java技术真是个无底洞啊!做软件开发也是如此吧!每天都有无数的新知识,每天学习都学不完。我找mentor要sockect编程的书籍,他说他平时用的时候时候才会拿来看看,平时都不会去刻意学习。无意间在书上看到发送邮件,想想我们部门做的项目里面也有一个邮件的代理,看看代码主要是两个模块,一个是vm模板,一个是email内容。
有了模板和参数,这时候有了Velocity。Velocity是一种java的模板技术,该项目由Apache提出,由另外一种引擎技术Webmacro引申而来。它是一种基于Java的模板引擎,但允许任何简单而强大的模板语言来引用定义在Java中的对象。Velocity就是MVC架构的一种实现,但它更多的是关注在Model,View之间。
1、创建velocity模版(其实和html一样)、
<html>
<title>Hello Velocity</title>
<body>
Welcome $name to Javayou.com!
today is $date.
</body>
</html>
2. 使用Velocity将参数传到模板里面
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
ClientResponse clientResp = null;
try {
WebResource webResource = client.resource(AppConfig.getConfig("server")
+ "/displayFile/vm/"
+ vmName + "/vm");//从文件服务器获取vm文件
clientResp = webResource.post(ClientResponse.class);
InputStream is = clientResp.getEntityInputStream();
String content= IOUtils.toString(is, "UTF-8");
<span style="white-space:pre"> </span>}catch(Exception e){}
用Velocity构建消息
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws Exception {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, "UTF-8");
mimeMessage.setHeader("Content-Transfer-Encoding", "8bit");
message.setFrom(request.getFrom());
message.setTo(request.getTos());
if (request.getCcs()!=null){
message.setCc(request.getCcs());
}
if (request.getBccs()!=null){
message.setBcc(request.getBccs());
}
message.setSubject(request.getSubject());
message.setSentDate(new Date());
log.info("send msg:"+content);
message.setText(buildmsg(content, request.getParameters()), true);
}
private String buildmsg(final String content, Map<String, String> parameters){
StringWriter w = new StringWriter();
VelocityContext context = new VelocityContext();
if (parameters!=null){
for (String key:parameters.keySet()) {
context.put(key, parameters.get(key));
}
}
Velocity.evaluate( context, w, "", content );
log.info("original text:"+content);
log.info("post text:"+w.toString());
return w.toString();
}
};
mailSender.send(preparator);
}