[英]Load FreeMarker Template for sending email
我是FreeMarker的新手,我想用它來發送電子郵件。 我的應用程序集成了Spring 3.1,Hibernate 3.0和Struts 2框架。
因此,基本上我發送郵件的代碼是(我使用的是Java郵件api):
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromAddress));
Address[] addresses = new Address[1];
addresses[0] = new InternetAddress(fromAddress);
message.setReplyTo(addresses);
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddress));
message.setSubject(subject);
//To set template using freemarker
BodyPart bodyPart = new MimeBodyPart();
Configuration cfg = new Configuration();
Template template = cfg.getTemplate("template.ftl");
Map<String, String> rootMap = new HashMap<String, String>();
rootMap.put("toName", toName);
rootMap.put("message", sendMessage);
Writer out = new StringWriter();
template.process(rootMap, out);
bodyPart.setContent(out.toString(), "text/html");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart);
message.setContent(multipart,"text/html; charset=ISO-8859-1");
Transport.send(message);
但是,當它嘗試發送郵件時,會引發Exception:
java.io.FileNotFoundException: Template "template.ftl" not found.
template.ftl
文件位於WEB-INF/ftl/
目錄中。
在我的spring-config.xml文件中,我添加了以下內容:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
</bean>
添加此語句
cfg.setClassForTemplateLoading(TestTemplate.class, "templates");
行前
Template template = cfg.getTemplate("template.ftl");
例如,將模板路徑添加到您將引用“ TestTemplate”的方法的同一文件夾中。
您可以添加setTemplateLoaderPath
@Bean
public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException {
FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory();
factory.setTemplateLoaderPath("classpath:templates");
factory.setDefaultEncoding("UTF-8");
FreeMarkerConfigurer result = new FreeMarkerConfigurer();
result.setConfiguration(factory.createConfiguration());
return result;
}
final Template template = configuration.getTemplate("file.ftl");
Map root = new HashMap();
root.put("user", "Big Joe");
Writer out = new OutputStreamWriter(System.out);
template.process(root,out);
假設您的FTL文件存儲在WEB-INF/freemarker
,所以對於Spring配置freemarkerConfig
將是這樣的:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/freemarker/" />
</bean>
在您的控制器中,如下所示注入freemarkerConfig
:
@Resource(name = "freemarkerConfig")
private FreeMarkerConfigurer freemarkerConfig;
並像這樣加載您的ftl頁面:
Map<String, Object> yourMap = new HashMap<String, Object>();
yourMap.put("var1", "");
yourMap.put("var2", "");
......
String content = FreeMarkerTemplateUtils.processTemplateIntoString(freemarkerConfig.getConfiguration().getTemplate("template.ftl"), yourMap );
content
變量現在將包含基於傳遞到ftl頁面的yourMap Map
所有ftl內容,因此您可以將其傳遞到api郵件。
有關FreeMarkerTemplateUtils.processTemplateIntoString
更多信息,請FreeMarkerTemplateUtils.processTemplateIntoString
Class FreeMarkerTemplateUtils文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.