0

im getting this error i searched on the same issues like mine on stack and i have foudn that i shouldn t put .html when calling it but im getting the same error :

`Caused by: org.thymeleaf.exceptions.TemplateInputException: Error resolving template "orderConfirmationEmailTemplate", template might not exist or might not be accessible by any of the configured Template Resolver`s 

my mail constructor :

@Component public class MailConstructor { @Autowired private Environment env; @Autowired private TemplateEngine templateEngine; public SimpleMailMessage constructNewUserEmail(User user, String password) { String message="\nPlease use the following credentials to log in and edit your personal information including your own password." + "\nUsername:"+user.getUsername()+"\nPassword:"+password; SimpleMailMessage email = new SimpleMailMessage(); email.setTo(user.getEmail()); email.setSubject("Le's Bookstore - New User"); email.setText(message); email.setFrom(env.getProperty("support.email")); return email; } public MimeMessagePreparator constructOrderConfirmationEmail (User user, Order order, Locale locale) { Context context = new Context(); context.setVariable("order", order); context.setVariable("user", user); context.setVariable("cartItemList", order.getCartItemList()); String text = templateEngine.process("orderConfirmationEmailTemplate.html", context); MimeMessagePreparator messagePreparator = new MimeMessagePreparator() { @Override public void prepare(MimeMessage mimeMessage) throws Exception { MimeMessageHelper email = new MimeMessageHelper(mimeMessage); email.setTo(user.getEmail()); email.setSubject("Order Confirmation - "+order.getId()); email.setText(text,true); email.setFrom(new InternetAddress("[email protected]")); } }; return messagePreparator; } 

and im calling it from rest service:

mailSender.send(mailConstructor.constructOrderConfirmationEmail(user, order, Locale.ENGLISH)); shoppingCartService.clearShoppingCart(shoppingCart); 

and im putting the file .html under package in the project

enter image description here

2 Answers 2

1

In your question, the TemplateEngine is auto wired so I cannot see how it is configured but it in order to discover your template from the location com.bookstore.domain.security.templates the configuration should look something like this:

@Bean public TemplateEngine templateEngine() { final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.addTemplateResolver(templateResolver()); return templateEngine; } private ITemplateResolver templateResolver() { final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); templateResolver.setPrefix(“/com/bookstore/domain/security/templates“); templateResolver.setSuffix(".html"); … return templateResolver; } 

In this code I am configuring the TemplateEngine in code, perhaps you are using XML. Regardless of how you are configuring the TemplateEngine, you are clearly using Spring to do so (since you inject it into your MailConstructor), the key point here is that regardless of how you configure it you need to tell it where to find your template and the way to do that is to invoke the ITemplateResolver's setPrefix() method.

Plenty more details in the article titled Sending email in Spring with Thymeleaf in the Thymeleaf docs.

Sign up to request clarification or add additional context in comments.

1 Comment

Regardless of how you configure your TemplateResolver the key point is that you need to tell it where to find your template and the way to do that is to invoke the ITemplateResolver's setPrefix() method. See the link I provided to the Thymeleaf docs for a working example.
0

actually with my configuration putted in my question i just put the .html file under file called templates under resources and it works the mail is sent , spring boot is apparently auto configured with this path without configuring the templateResolver

enter image description here

1 Comment

The TemplateResolver which Spring Boot auto configures resolves templates from the /templates folder so putting your template in that folder allows you to use the default configuration

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.