2017-04-21 97 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