こんなコードがあります。
private static final String EMAIL_INLINEIMAGE_TEMPLATE_NAME = "templateemail.html";
@Bean
public TemplateEngine emailTemplateEngine() {
templateEngine = new SpringTemplateEngine();
templateEngine.addTemplateResolver(this.htmlTemplateResolver());
)
templateEngine.setTemplateEngineMessageSource(this.messageSource);
return templateEngine;
}
private static ITemplateResolver htmlTemplateResolver() {
final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setOrder(Integer.valueOf(0));
templateResolver.setPrefix("classpath:/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateResolver.DEFAULT_TEMPLATE_MODE);
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(false);
return templateResolver;
}
public void sendEmail(String emailAddress, String title, String body, Locale local, String image) {
if (Boolean.parseBoolean(isEmailServiceActivated)) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mailMsg = new MimeMessageHelper(mimeMessage);
try {
mailMsg.setFrom(EMAIL_USERNAME);
mailMsg.setTo(emailAddress);
mailMsg.setSubject(title);
// Prepare the evaluation context
ctx.setLocale(local);
ctx.setVariable("imageHeaderResourceName", HEADER_LOGO_IMAGE);
ctx.setVariable("body", body);
ctx.setVariable("imageResourceName", image);
final String htmlContent = this.templateEngine.process(new ClassPathResource(EMAIL_INLINEIMAGE_TEMPLATE_NAME).getPath(), ctx);
mailMsg.setText(htmlContent, true );
mailMsg.addInline(HEADER_LOGO_IMAGE, new ClassPathResource(HEADER_LOGO_IMAGE ) , PNG_MIME);
mailMsg.addInline(image, new ClassPathResource(image) , PNG_MIME);
} catch (MessagingException e) {
e.printStackTrace();
}
mailSender.send(mimeMessage);
}
}
私は/templates/ディレクトリの下にtemplateemail.htmlファイルを持っています。私が電子メール送信メソッドを起動すると、私はこの例外を持っています。
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "templateemail.html", template might not exist or might not be accessible by any of the configured Template Resolvers
テンプレートエンジンが私のファイルを見つけられないのか(tomcatの絶対パスや/binディレクトリでも試しましたがダメでした)、私が正しいTemplate Resolverを設定できていないのか分かりません。 ありがとうございました。I
私も最近、同じような問題がありました。私の問題は、私のテンプレートが /
で始まる他のテンプレートへの参照を持っていたことです。
例えば、以下のようなものです。
<html ... th:include="/internal/layout-normal :: page"> <-- 失敗しました。
<html ... th:include="internal/layout-normal :: page"> <-- 動作しました。
IntelliJからアプリケーションを実行すると、どちらのバリアントも問題なく動作しました。しかし、パッケージングして java -jar
で実行すると、最初の行が失敗しました。
を削除することで、問題が解決しました。