2017-04-21 82 views
1

有没有什么办法可以在同样的sampletemplate.html文件中发送文本和html版本?我们一直在使用Java Mail Sender API来创建纯文本内容和html内容。我们已经尝试了下面的代码: 你的名字是[[$ {TestName}]]显示文本版本,但它没有映射值,因为它不能识别格式。 也尝试下面的版本以及百里香文本和html版本

[# th:if="${PLAIN}"] 
    Your name is [[${TestName}]] 
[/] 
[# th:if="${PLAIN} = false"] 
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:th="http://www.thymeleaf.org" > 
    <head></head><body>Your name is [[${TestName}]]</body</html> 

有什么办法,我可以兼得,我template.I正在使用Spring启动,但尝试,因为他们不再支持删除现有Velocity模板的文本和HTML版本。任何其他模板引擎,帮助我实现这一目标? TIA。

回答

0

您可以覆盖template engine将其配置为txt解析器,像未来:

@Configuration 
@EnableWebMvc 
public class ThymeleafConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware { 

    private static final String UTF8 = "UTF-8"; 

    private ApplicationContext applicationContext; 

    @Override 
    public void setApplicationContext(ApplicationContext applicationContext) { 
     this.applicationContext = applicationContext; 
    } 

    private TemplateEngine templateEngine(ITemplateResolver templateResolver) { 
     SpringTemplateEngine engine = new SpringTemplateEngine(); 
     engine.setTemplateResolver(templateResolver); 
     return engine; 
    } 

    @Bean 
    public ViewResolver txtViewResolver() { 
     ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
     resolver.setTemplateEngine(templateEngine(txtTemplateResolver())); 
     resolver.setContentType("text/plain"); 
     resolver.setCharacterEncoding(UTF8); 
     resolver.setViewNames(array("*.html")); 
     return resolver; 
    } 

    private ITemplateResolver txtTemplateResolver() { 
     SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
     resolver.setApplicationContext(applicationContext); 
     resolver.setPrefix("/templates/"); 
     resolver.setTemplateMode(TemplateMode.TEXT); 
     return resolver; 
    } 
} 

,那么你会解析所有文本,避免HTML模板解析错误,让你用一个布尔喜欢你所做的和解析the txt or html:

[# th:if="${PLAIN} = true"] 
    Your name is [# th:utext="${TestName}" /] 
[/] 
[# th:if="${PLAIN} = false"] 
    <html lang="en"> 
    <head></head><body>Your name is [# th:utext="${TestName}" /]</body</html> 
[/] 

然后,您只需将thymeleaf生成的txt添加到您的邮件。

+0

太棒了..非常感谢你!有几个后续问题,虽然 - 模板将是.html或.txt文件?它仍然需要声明其thymeleaf模板 这不会造成问题吗? 你有什么想法如何测试在Outlook或Gmail中发送电子邮件的文本版本? –

+0

模板必须是您在'resolver.setViewNames(array(“*。html”));'中设置的内容。在这个例子中是html,但你可以使用你想要的。否则,你是正确的,删除​​thymeleaf声明'xmlns:th =“thymeleaf.org”',我没有意识到(答案更新) – Pau

+0

否则测试版本的文本,我猜你正在使用Spring MimeMessageHelper类,所以只需使用它的方法: 'setText(String text,boolean html)'并将boolean html设置为false或true,取决于您是否希望成为html – Pau