使用Spring Boot时如何使用SpringTemplateEngine

我正在使用Thymeleaf SpringTemplateEngine在我的Spring应用程序上创建HTML电子邮件。当我使用纯Spring

MVC时,一切都很完美。现在使用Spring

Boot,该类找不到我的.html模板。我认为问题出在ServletContext,它没有返回正确的路径,但是我不知道如何解决它。所以我应该使用另一个上下文来处理模板吗?哪一个?

这是我的MailService,用于纯Spring MVC。

@Service

public class MailService {

private JavaMailSenderImpl mailSender;

private SpringTemplateEngine templateEngine;

public MailService() {

mailSender = new JavaMailSenderImpl();

//mailSender config

templateEngine = new SpringTemplateEngine();

Set<ITemplateResolver> templatesResolvers = new HashSet<ITemplateResolver>();

ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();

emailTemplateResolver.setPrefix("mail/");

emailTemplateResolver.setTemplateMode("HTML5");

emailTemplateResolver.setCharacterEncoding("UTF-8");

emailTemplateResolver.setOrder(1);

templatesResolvers.add(emailTemplateResolver);

ServletContextTemplateResolver webTemplateResolver = new ServletContextTemplateResolver();

webTemplateResolver.setPrefix("/mail/");

webTemplateResolver.setTemplateMode("HTML5");

webTemplateResolver.setCharacterEncoding("UTF-8");

webTemplateResolver.setOrder(2);

templatesResolvers.add(webTemplateResolver);

templateEngine.setTemplateResolvers(templatesResolvers);

}

public void sendReport(String nome, String email, String obra,

long medicao, HttpServletRequest request,

HttpServletResponse response, ServletContext context, Locale locale)

throws MessagingException {

String subject = "Novo relatório";

final WebContext ctx = new WebContext(request, response, context,

locale);

ctx.setVariable("nome", nome);

ctx.setVariable("obra", obra);

ctx.setVariable("data", DataUtils.getInstance().getDataString(medicao));

ctx.setVariable("logo", "logo.jpg");

final MimeMessage mimeMessage = this.mailSender.createMimeMessage();

final MimeMessageHelper message = new MimeMessageHelper(mimeMessage,

true, "UTF-8");

message.setSubject(subject);

try {

message.setFrom(new InternetAddress(mailSender.getUsername(),

"Sistema"));

} catch (UnsupportedEncodingException e) {

}

message.setTo(email);

final String htmlContent = this.templateEngine.process(

"email-relatorio.html", ctx);

message.setText(htmlContent, true);

try {

File file = new File(context.getRealPath("app/img/logo-pro.jpg"));

InputStreamSource imageSource = new ByteArrayResource(

IOUtils.toByteArray(new FileInputStream(file)));

message.addInline("logo.jpg", imageSource, "image/jpg");

} catch (IOException e) {

e.printStackTrace();

}

this.mailSender.send(mimeMessage);

}

}

错误:

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "email-relatorio.html", template might not exist or might not be accessible by any of the configured Template Resolvers

at org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:246)

at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1104)

at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)

at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)

at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:924)

at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:898)

回答:

您正在使用Spring Boot,然后让Spring

Boot完成已经完成的繁重工作。删除你的构造,简单@AutowireJavaMailSenderSpringTemplateEngine

将邮件配置添加到中application.properties

spring.mail.host=your-mail-server

spring.mail.port=

spring.mail.username

spring.mail.password

将百里香叶配置添加到application.properties

# THYMELEAF (ThymeleafAutoConfiguration)

spring.thymeleaf.check-template-location=true

spring.thymeleaf.prefix=classpath:/templates/

spring.thymeleaf.excluded-view-names= # comma-separated list of view names that should be excluded from resolution

spring.thymeleaf.view-names= # comma-separated list of view names that can be resolved

spring.thymeleaf.suffix=.html

spring.thymeleaf.mode=HTML5

spring.thymeleaf.encoding=UTF-8

spring.thymeleaf.content-type=text/html # ;charset=<encoding> is added

spring.thymeleaf.cache=true # set to false for hot refresh

如果您这样做了,就改变您的班级

@Service

public class MailService {

@Autowired

private JavaMailSender mailSender;

@Autowired

private SpringTemplateEngine templateEngine;

@Value("${spring.mail.username}")

private String username;

public void enviarRelatorio(String nome, String email, String obra,long medicao, Locale locale) throws MessagingException {

String subject = "Novo relatório";

final Context ctx = new Context(locale);

ctx.setVariable("nome", nome);

ctx.setVariable("obra", obra);

ctx.setVariable("data", DataUtils.getInstance().getDataString(medicao));

ctx.setVariable("logo", "logo.jpg");

final MimeMessage mimeMessage = this.mailSender.createMimeMessage();

final MimeMessageHelper message = new MimeMessageHelper(mimeMessage,true, "UTF-8");

message.setSubject(subject);

message.setTo(email);

try {

message.setFrom(new InternetAddress(username, "Sistema"));

} catch (UnsupportedEncodingException e) {

}

final String htmlContent = this.templateEngine.process( "email-relatorio", ctx);

message.setText(htmlContent, true);

try {

message.addInline("logo.jpg", new FileSystemResource("imgs/logo-pro.jpg"), "image/jpg");

} catch (IOException e) {

e.printStackTrace();

}

this.mailSender.send(mimeMessage);

}

}

以上是 使用Spring Boot时如何使用SpringTemplateEngine 的全部内容, 来源链接: utcz.com/qa/435827.html

回到顶部