Reputation: 23
I am trying to send a simple HTML mail using Spring 4 and Thymeleaf templates. In my java class I have:
// Prepare the evaluation context
final Context ctx = new Context(locale);
ctx.setVariable("token", token);
ctx.setVariable("serverUrl", serverUrl);
//process template
final String htmlContent = templateEngine.process("resetPassword", ctx);
templateEngine.addTemplateResolver(emailTemplateResolver);
// Prepare message using a Spring helper
final MimeMessage mimeMessage = this.javaMailSender.createMimeMessage();
MimeMessageHelper mailMessage;
try {
mailMessage = new MimeMessageHelper(mimeMessage, true, "UTF-8");
mailMessage.setTo(email);
mailMessage.setSubject("Reset password");
mailMessage.setFrom("[email protected]");
// Create the HTML body using Thymeleaf
mailMessage.setText(htmlContent, true);
this.javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
logger.error(e.toString());
}
My template engine is org.thymeleaf.spring4.SpringTemplateEngine
I've also tried assigning a custom template engine configuration:
public ClassLoaderTemplateResolver emailTemplateResolver(){
ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
emailTemplateResolver.setPrefix("/templates/");
emailTemplateResolver.setSuffix(".html");
emailTemplateResolver.setTemplateMode("HTML5");
emailTemplateResolver.setCharacterEncoding("UTF-8");
emailTemplateResolver.setOrder(1);
return emailTemplateResolver;
}
And my HTML template contains blocks like this within HTML markup:
th:href="#{${serverUrl}resetPassword?token=${token}}"
I would expect serverUrl and token to evaluate to Context variables, I've set in java code, but instead I get this within my email:
??${serverUrl}resetPassword?token=${token}_en_US??
I've spent two days reading every single post on the subject and I can say, with absolute assurance, that I am firmly stuck. Any help would be highly appreciated.
Alex
Upvotes: 2
Views: 1052
Reputation: 2071
You are trying to create a link by using syntax for i18n messages.
Instead of:
th:href="#{${serverUrl}resetPassword?token=${token}}"
use the following :
th:href="@{${serverUrl} +'resetPassword'(token=${token})}"
Upvotes: 1