Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法发送富文本电子邮件-Thymeleaf+;春季4_Java_Spring_Email_Thymeleaf - Fatal编程技术网

Java 无法发送富文本电子邮件-Thymeleaf+;春季4

Java 无法发送富文本电子邮件-Thymeleaf+;春季4,java,spring,email,thymeleaf,Java,Spring,Email,Thymeleaf,我正在尝试使用ThymleAF+Spring4发送一封富文本电子邮件。我在Thymeleaf的网站上遵循了这个例子,但出于某种原因,它抛出了一个异常 这是我的配置: @Bean public ServletContextTemplateResolver templateResolver() { ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(); resolver.setPr

我正在尝试使用ThymleAF+Spring4发送一封富文本电子邮件。我在Thymeleaf的网站上遵循了这个例子,但出于某种原因,它抛出了一个异常

这是我的配置:

@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;
}