HTML 使用 Spring4 和 Thymeleaf 的邮件
HTML mail using Spring4 and Thymeleaf
我正在尝试使用 Spring 4 和 Thymeleaf 模板发送简单的 HTML 邮件。在我的 java class 我有:
// 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("no-reply@some.co.uk");
// Create the HTML body using Thymeleaf
mailMessage.setText(htmlContent, true);
this.javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
logger.error(e.toString());
}
我的模板引擎是org.thymeleaf.spring4.SpringTemplateEngine
我也试过分配自定义模板引擎配置:
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;
}
我的 HTML 模板在 HTML 标记中包含这样的块:
th:href="#{${serverUrl}resetPassword?token=${token}}"
我希望 serverUrl 和令牌评估为上下文变量,我已经在 java 代码中设置,但我在我的电子邮件中得到了这个:
??${serverUrl}resetPassword?token=${token}_en_US??
我花了两天时间阅读了关于该主题的每一本 post,我可以绝对肯定地说,我完全被困住了。任何帮助将不胜感激。
亚历克斯
您正在尝试使用 i18n 消息的语法来创建 link。
而不是:
th:href="#{${serverUrl}resetPassword?token=${token}}"
使用以下内容:
th:href="@{${serverUrl} +'resetPassword'(token=${token})}"
我正在尝试使用 Spring 4 和 Thymeleaf 模板发送简单的 HTML 邮件。在我的 java class 我有:
// 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("no-reply@some.co.uk");
// Create the HTML body using Thymeleaf
mailMessage.setText(htmlContent, true);
this.javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
logger.error(e.toString());
}
我的模板引擎是org.thymeleaf.spring4.SpringTemplateEngine
我也试过分配自定义模板引擎配置:
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;
}
我的 HTML 模板在 HTML 标记中包含这样的块:
th:href="#{${serverUrl}resetPassword?token=${token}}"
我希望 serverUrl 和令牌评估为上下文变量,我已经在 java 代码中设置,但我在我的电子邮件中得到了这个:
??${serverUrl}resetPassword?token=${token}_en_US??
我花了两天时间阅读了关于该主题的每一本 post,我可以绝对肯定地说,我完全被困住了。任何帮助将不胜感激。
亚历克斯
您正在尝试使用 i18n 消息的语法来创建 link。
而不是:
th:href="#{${serverUrl}resetPassword?token=${token}}"
使用以下内容:
th:href="@{${serverUrl} +'resetPassword'(token=${token})}"