Java 无法发送富文本电子邮件-Thymeleaf+;春季4
我正在尝试使用ThymleAF+Spring4发送一封富文本电子邮件。我在Thymeleaf的网站上遵循了这个例子,但出于某种原因,它抛出了一个异常 这是我的配置:Java 无法发送富文本电子邮件-Thymeleaf+;春季4,java,spring,email,thymeleaf,Java,Spring,Email,Thymeleaf,我正在尝试使用ThymleAF+Spring4发送一封富文本电子邮件。我在Thymeleaf的网站上遵循了这个例子,但出于某种原因,它抛出了一个异常 这是我的配置: @Bean public ServletContextTemplateResolver templateResolver() { ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(); resolver.setPr
@Bean
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
resolver.setCharacterEncoding("UTF-8");
resolver.setTemplateMode("HTML5");
resolver.setOrder(2);
return resolver;
}
@Bean
public ClassLoaderTemplateResolver emailTemplateResolver() {
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("/WEB-INF/views/mail/");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
resolver.setCharacterEncoding("UTF8");
resolver.setOrder(1);
return resolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
final SpringTemplateEngine engine = new SpringTemplateEngine();
final Set<TemplateResolver> templateResolvers = new HashSet<TemplateResolver>();
templateResolvers.add(templateResolver());
templateResolvers.add(emailTemplateResolver());
engine.setTemplateResolvers(templateResolvers);
return engine;
}
下面是正在引发的异常:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Resource resolution by ServletContext with org.thymeleaf.resourceresolver.ServletContextResourceResolver can only be performed when context implements org.thymeleaf.context.IWebContext [current context: org.thymeleaf.context.Context]
有人知道我如何解决这个问题吗
提前感谢下面的代码将有助于工作
WebContext wc=new WebContext(request,response,servletContext,request.getLocale());//servletContext Spring Context
MimeMessage message = this.mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
wc.setVariable("name", "abc");// If you want to pass params to Template
final String htmlContent = this.templateEngine.process("TemplateName", wc);
嘿,在一些研究之前和之后,我遇到了这个问题,我找到了解决这个问题的方法。将Java配置更改为这样,您还必须将html内容移动到/WEB-INF/classes/mail/,因为ClassLoaderTemplateResolver在classes目录中查找您的文件
@Bean
public TemplateResolver templateResolver() {
TemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
resolver.setCharacterEncoding("UTF-8");
resolver.setTemplateMode("HTML5");
resolver.setOrder(2);
return resolver;
}
@Bean
public TemplateResolver emailTemplateResolver() {
TemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("mail/");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
resolver.setCharacterEncoding("UTF-8");
resolver.setOrder(1);
return resolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
final SpringTemplateEngine engine = new SpringTemplateEngine();
final Set<TemplateResolver> templateResolvers = new HashSet<TemplateResolver>();
templateResolvers.add(emailTemplateResolver());
templateResolvers.add(templateResolver());
engine.setTemplateResolvers(templateResolvers);
return engine;
}
@Bean
公共TemplateResolver TemplateResolver(){
TemplateResolver解析器=新建ServletContextTemplateResolver();
resolver.setPrefix(“/WEB-INF/views/”);
resolver.setSuffix(“.html”);
解析器.setCharacterEncoding(“UTF-8”);
resolver.setTemplateMode(“HTML5”);
解析程序设置顺序(2);
返回解析器;
}
@豆子
公共TemplateResolver电子邮件TemplateResolver(){
TemplateResolver解析器=新类装入器TemplateResolver();
resolver.setPrefix(“mail/”);
resolver.setSuffix(“.html”);
resolver.setTemplateMode(“HTML5”);
解析器.setCharacterEncoding(“UTF-8”);
解析程序设置顺序(1);
返回解析器;
}
@豆子
公共SpringTemplateEngine模板引擎(){
最终的SpringTemplateEngine引擎=新的SpringTemplateEngine();
最终集templateResolvers=新HashSet();
添加(emailTemplateResolver());
添加(templateResolver());
引擎设置模板解算器(模板解算器);
返回引擎;
}
希望这有帮助 切换配置中
TemplateResolver
s的顺序。如错误所示,您是否尝试了IWebContext
而不是Context
@M.Deinum?您是指文件中的物理位置还是setOrder编号?如果是setOrder,我已经尝试过了,但没有成功。@redflar3为了创建IWebContext,我还需要传递并获取请求和响应。我会把它作为最后的手段,因为我在网上读到这不是最好的做法。但是,嘿,谢谢你的推荐。@Jail订单没有做任何事情,因为你自己正在将它们添加到集合中。您需要切换该选项或将列表注入方法中,以使order
属性工作(templateEngine(列表解析器)
,然后注入它,而不是自己创建集合)。另外,/WEB-INF
不是类路径的一部分,因此使用它作为位置可能会有问题。
@Bean
public TemplateResolver templateResolver() {
TemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
resolver.setCharacterEncoding("UTF-8");
resolver.setTemplateMode("HTML5");
resolver.setOrder(2);
return resolver;
}
@Bean
public TemplateResolver emailTemplateResolver() {
TemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("mail/");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
resolver.setCharacterEncoding("UTF-8");
resolver.setOrder(1);
return resolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
final SpringTemplateEngine engine = new SpringTemplateEngine();
final Set<TemplateResolver> templateResolvers = new HashSet<TemplateResolver>();
templateResolvers.add(emailTemplateResolver());
templateResolvers.add(templateResolver());
engine.setTemplateResolvers(templateResolvers);
return engine;
}