我正在尝试使用 Spring 和 Velocity 发送预定义的HTML电子邮件模板。它抛出了这个例外:
java.lang.NullPointerException:
null at org.springframework.ui.velocity.VelocityEngineUtils.mergeTemplate(VelocityEngineUtils.java:53)~[spring-context-support-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.ui.velocity.VelocityEngineUtils.mergeTemplateIntoString(VelocityEngineUtils.java:92) ~[spring-context-support-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at com.incyyte.app.service.MailService.sendReactivationEmail(MailService.java:159) ~[classes/:na]
我的功能实现如下所示:
public void sendReactivationEmail(Optional<User> user) {
Locale locale = Locale.forLanguageTag(user.get().getLangKey());
String websiteURL = messageSource.getMessage("website.url", null, locale);
String reactivationURL = websiteURL + messageSource.getMessage("activation.url", null, locale);
String emailSubject = messageSource.getMessage("reactivation.subject", null, locale);
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("vmTemplate/Reactive_email.vm").getFile());
Map<String, Object> emailModel = new HashMap<String, Object>();
emailModel.put("username", user.get().getLogin());
emailModel.put("activationCode", reactivationURL + user.get().getActivationKey());
emailModel.put("webURL", websiteURL);
String content = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, file.getAbsolutePath(), emailModel);
sendEmail(user.get().getEmail(), emailSubject, content, false, true);
}
我看过文件的绝对路径,它显示为
D:\v2dev\incyyte_version2\appCode\target\classes\vmTemplate\Reactive_email.vm
此处Reactive_email.vm是HTML格式的电子邮件模板。我认为这个异常即将发生,因为Velocity无法读取文件。请帮我跟踪此异常以及如何解决它。
答案 0 :(得分:0)
您之前不必在File
中加载模板。您可以直接将方法mergeTemplateIntoString
与模板的路径一起使用。
像这样:
String content = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "vmTemplate/Reactive_email.vm", emailModel);
确保模板位于src/main/resources
目录。
希望它能帮到你