Pio*_*zak 6 java email maven thymeleaf spring-boot
我在基于Spring Boot(最新的1.1.5.RELEASE)和Thymeleaf的WebApp工作.
现在我想添加发送电子邮件的功能,并使用Thymelaf作为模板引擎.
在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>
Run Code Online (Sandbox Code Playgroud)
遵循本教程: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;
}
}
Run Code Online (Sandbox Code Playgroud)
文件夹和文件树如下:
src
main
resources
templates
login.html
error.html
mails
exampleMail.html
Run Code Online (Sandbox Code Playgroud)
但它不起作用.应用程序正确启动但访问页面(没有此配置工作)会导致异常,例如:
请求处理失败; 嵌套的例外是org.thymeleaf.exceptions.TemplateInputException:错误解决模板"登录",模板可能不存在或可能不通过任何配置的模板解析器访问
我试图把不同的前缀为webTemplateResolver.setPrefix但没有成功.
此外,我注意到在早期版本的Thymeleaf中报告的错误导致了但看起来它已修复,我有更新的版本.
有没有人在这种配置中看到misteake?
M. *_*num 17
主要问题是你配置太多了.
Spring Boot已经配置了一个TemplateEngine
以及一个ThymeleafViewResolver
.看到了ThymeleafAutoConfiguration
.如果您查看该类,您还会注意到它会自动检测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;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12726 次 |
最近记录: |