我有一个基于 Spring Boot(最新的 1.1.5.RELEASE)和 Thymeleaf 的工作 WebApp。
现在我想添加发送电子邮件的功能并使用 Thymeleaf 作为模板引擎。
在 pom.xml 中我添加:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mail</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
遵循本教程:http://www.thymeleaf.org/doc/articles/springmail.html
我得到了这样的完整(无 XML)Java 配置:
@Configuration
public ThymeleafReplaceConfigurator {
@Bean
public JavaMailSender getJavaMailSenderImpl(){
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
Properties props = new Properties();
/* some properties here */
javaMailSender.setJavaMailProperties(props);
return javaMailSender;
}
@Bean
public ClassLoaderTemplateResolver emailTemplateResolver(){
ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
emailTemplateResolver.setPrefix("/mails/");
emailTemplateResolver.setSuffix(".html");
emailTemplateResolver.setTemplateMode("HTML5");
emailTemplateResolver.setCharacterEncoding("UTF-8");
emailTemplateResolver.setOrder(1);
return emailTemplateResolver;
}
@Bean
public ServletContextTemplateResolver defaultWebTemplateResolver(){
ServletContextTemplateResolver webTemplateResolver = new ServletContextTemplateResolver();
webTemplateResolver.setPrefix("/templates/");
webTemplateResolver.setSuffix(".html");
webTemplateResolver.setTemplateMode("HTML5");
webTemplateResolver.setCharacterEncoding("UTF-8");
webTemplateResolver.setOrder(2);
return webTemplateResolver;
}
@Bean
public SpringTemplateEngine templateEngine(){
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(emailTemplateResolver());
templateEngine.setTemplateResolver(defaultWebTemplateResolver());
return templateEngine;
}
@Bean
public ThymeleafViewResolver thymeleafViewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine());
thymeleafViewResolver.setCharacterEncoding("UTF-8");
return thymeleafViewResolver;
}
}
文件夹和文件树如下:
src
main
resources
templates
login.html
error.html
mails
exampleMail.html
但它不起作用。应用程序正确启动但访问页面(无需此配置即可工作)会导致异常,如:
请求处理失败;嵌套异常是 org.thymeleaf.exceptions.TemplateInputException:解析模板“登录”时出错,模板可能不存在或可能无法被任何已配置的模板解析器访问
我尝试将不同的前缀放入 webTemplateResolver.setPrefix 但没有成功。
我还注意到在早期版本的 Thymeleaf 中报告了导致该问题的错误,但看起来它已修复并且我有更新的版本。
有人看到此配置中的错误吗?
最佳答案
主要问题是你配置太多了。
Spring Boot 已经配置了一个 TemplateEngine
以及一个 ThymeleafViewResolver
。查看ThymeleafAutoConfiguration
为了那个原因。如果你look at that class您还会注意到,它会自动检测您的应用程序中可能拥有的任何 ITemplateResolver
实例,并将其添加到 SpringTemplateEngine
。
解决方案非常简单,只删除电子邮件配置和 emailTemplateResolver
以外的所有内容。其他一切都将由 Spring Boot 处理。
@Configuration
public class ThymeleafEmailConfiguration {
@Bean
public JavaMailSender getJavaMailSenderImpl(){
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
Properties props = new Properties();
/* some properties here */
javaMailSender.setJavaMailProperties(props);
return javaMailSender;
}
@Bean
public ClassLoaderTemplateResolver emailTemplateResolver(){
ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
emailTemplateResolver.setPrefix("/mails/");
emailTemplateResolver.setSuffix(".html");
emailTemplateResolver.setTemplateMode("HTML5");
emailTemplateResolver.setCharacterEncoding("UTF-8");
emailTemplateResolver.setOrder(1);
return emailTemplateResolver;
}
}
关于java - 使用 Thymeleaf 作为模板的 Spring Boot 发送电子邮件 - 配置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25610281/