簡體   English   中英

加載FreeMarker模板以發送電子郵件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM