2017-04-21 12 views
1

동일한 sampletemplate.html 파일에 텍스트 및 HTML 버전을 보낼 수있는 방법이 있습니까? Google은 Java Mail Sender API를 사용하여 일반 텍스트 콘텐츠와 HTML 콘텐츠를 모두 제작했습니다. 우리는 아래의 코드를 시도했습니다 : 텍스트 버전을 표시하려면 귀하의 이름은 [[$ {TestName}]입니다. 그러나 형식을 인식하지 못하기 때문에 값을 매핑하지 않습니다. 버전 아래 시도해 봤어뿐만 아니라Thymeleaf 텍스트 및 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 봄 부팅을 사용하지만 그들은 더 이상 지원되지 않기 때문에 기존의 속도 템플릿을 제거하기 위해 노력하고 텍스트 및 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 템플릿 해결 오류를 피하고, 모든 텍스트로 구문 분석 및 구문 분석 TXT 또는 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이지만 원하는 것을 사용할 수 있습니다. 그렇지 않으면 당신은 맞습니다 delete thymeleaf declaration'xmlns : th = "thymeleaf.org"', 나는 깨달았습니다 (업데이트 된 답변) – Pau

+0

그렇지 않으면 버전 텍스트를 테스트하기 위해 Spring MimeMessageHelper 클래스를 사용하고 있다고 생각합니다. 'setText (문자열 텍스트, 부울 html)'및 불리언 html을 false 또는 true로 설정하십시오. html이 되길 원하십니까? – Pau