Я использую тимелеаф для отправки сообщения по почте, я использую Contex() для установки переменных, которые имеют пользовательские поля. В чем проблема? Проблема в том, что при отправке данных из шаблона с почты отправляется весь html код, а нужно только сообщение. думаю по коду будет понятнее
Context context = new Context();
context.setVariable("name", user.getUsername());
context.setVariable("activationCode", user.getActivationCode());
MvcConfig mvcConfig = new MvcConfig();
TemplateEngine templateEngine = mvcConfig.templateEngine();
String text = templateEngine.process("email-template",context);
if (!org.springframework.util.StringUtils.isEmpty(user.getEmail())) {
//TODO: move to template
mailSenderService.send(user.getEmail(), "Activation code", text);
}
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addTemplateResolver(new UrlTemplateResolver());
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
в таком виде приходит на почту, а должно быть примерно так Привет, дорогая, лаза Добро пожаловать. Посетите http://aa.ru/activate-account/blalblalbla






Измените метод templateEngine() следующим образом:
@Bean
public ITemplateEngine htmlTemplateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML); // Important line is here for HTML!!!
templateResolver.setCacheable(false);
templateEngine.setTemplateResolver(templateResolver);
return templateEngine;
}
Обратите внимание на строку TemplateMode.HTML
Согласно https://www.thymeleaf.org/doc/articles/springmail.html
private ITemplateResolver htmlTemplateResolver() {
final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setOrder(Integer.valueOf(2));
templateResolver.setResolvablePatterns(Collections.singleton("html/*"));
templateResolver.setPrefix("/mail/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCharacterEncoding(EMAIL_TEMPLATE_ENCODING);
templateResolver.setCacheable(false);
return templateResolver;
}
И
@Bean
public TemplateEngine emailTemplateEngine() {
final SpringTemplateEngine templateEngine = new SpringTemplateEngine();
// Resolver for HTML emails (except the editable one)
templateEngine.addTemplateResolver(htmlTemplateResolver());
...
}
конфликт типов ClassLoaderTemplateResolver и ITemplateResolver
не найти шаблон
Ты единственный, кто может это сделать ;)
public void send(String emailTo, String subject, String message,String content) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
mimeMessage.setSubject(subject);
mimeMessage.setContent(content, "HTML5");
MimeMessageHelper helper;
helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(username);
helper.setTo(emailTo);
helper.setText(message,true);
mailSender.send(mimeMessage);}
я добавляю контент в метод отправки почты, это решает проблему
ничего не меняй, тот же результат