【发布时间】:2020-08-27 20:13:51
【问题描述】:
我正在尝试使用 spring boot 和 thymeleaf 发送内联电子邮件。我添加了新的模板文件“test-email.html”
我有以下 bean 配置
@Qualifier("emailSender")
@Autowired
private val templateEngine: SpringTemplateEngine? = null
@Bean(name = ["emailSender"])
fun springTemplateEngine(): SpringTemplateEngine? {
val templateEngine = SpringTemplateEngine()
templateEngine.addTemplateResolver(htmlTemplateResolver())
return templateEngine
}
@Bean
fun htmlTemplateResolver(): SpringResourceTemplateResolver? {
val emailTemplateResolver = SpringResourceTemplateResolver()
emailTemplateResolver.prefix = "/templates/email/"
emailTemplateResolver.suffix = ".html"
emailTemplateResolver.templateMode = TemplateMode.HTML
emailTemplateResolver.characterEncoding = StandardCharsets.UTF_8.name()
return emailTemplateResolver
}
以下函数用于发送解析模板和发送电子邮件。
fun sendTemplateMessage(to: String, subject: String, text: String) {
val mimeMessage: MimeMessage? = emailSender?.createMimeMessage()
val helper = mimeMessage?.let { MimeMessageHelper(it, "utf-8") }
val context = Context()
context.setVariable("msg", "This is test message")
val htmlMsg = templateEngine!!.process("test-email", context)
helper?.setText(htmlMsg, true)
helper?.setTo(to)
helper?.setSubject(subject)
emailSender?.send(mimeMessage)
}
但这给出了 FileNotFound 异常。
原因:java.io.FileNotFoundException: ReactiveWebContext 资源 [/templates/email/test-email.html] 无法打开,因为它不存在
如何向模板引擎提供模板文件路径?
【问题讨论】:
-
emailTemplateResolver.prefix的值加上classpath:后可以试试吗。所以最终值就像"classpath:/templates/email/"。 -
@Saurabh 是的,它奏效了!谢谢
-
那么让我添加它作为答案。
标签: spring-boot thymeleaf