Я успешно отправил текстовое электронное письмо, и нижеприведенная реализация отправляет действительно базовые электронные письма в формате html - я не получаю классы CSS ни в одном из них.
Соответствующие части моего MailServiceImpl
класса:
protected void prepareAndSendMail(Map<String, String> emailMap) {
try {
InternetAddress[] parsed;
try {
parsed = InternetAddress.parse(emailMap.get("to"));
} catch (AddressException e) {
throw new IllegalArgumentException("Not valid email: " + emailMap.get("to)"), e);
}
MimeMessage mailMessage = javaMailSender.createMimeMessage();
mailMessage.setSubject(emailMap.get("subject"), "UTF-8");
MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true, "UTF-8");
helper.setFrom(emailMap.get("from"));
helper.setTo(parsed);
helper.setText(mailContentBuilderService.buildHTMLTemplate(emailMap.get("text")), true);
javaMailSender.send(mailMessage);
} catch (MessagingException ex) {
throw new RuntimeException(ex);
}
}
protected String buildConfirmRegistrationButton(String label, String confirmationUrl) {
StringBuilder content = new StringBuilder();
content.append("<div class=\"jumbotron\">");
content.append("<div class=\"container-fluid\">");
content.append("<div class=\"form-group row justify-content-md-center justify-content-lg-center justify-content-xl-center\">");
content.append("<label>" + label + "</label> \r\n");
content.append("<br />");
content.append("<a href=\"" + confirmationUrl + "\">");
content.append("<button class=\"btn btn-primary\"> Click here to confirm </button>");
content.append("</a>");
content.append("</div>");
content.append("</div>");
content.append("</div>");
return content.toString();
}
@Override
public void sendNewUserRegistrationToken_HTML(OnRegistrationCompleteEvent onRegistrationCompleteEvent, User user, String token) {
Locale locale = Locale.US;
final String subject = messageSource.getMessage("mail.registrationConfirmationSubject", null, locale);
final String label = messageSource.getMessage("mail.registrationConfirmationLabel", new Object[]{user.getEmail()}, locale);
final String confirmationUrl = onRegistrationCompleteEvent.getAppUrl() + "/admin/user/registration/confirm?token=" + token;
final String content = buildConfirmRegistrationButton(label, confirmationUrl);
Map<String, String> emailMap = new HashMap<>();
emailMap.put("to", user.getEmail());
emailMap.put("from", environment.getProperty("support.email"));
emailMap.put("subject", subject);
emailMap.put("text", content);
prepareAndSendMail(emailMap);
}
Метод prepareAndSendMail
вызывает mailContentBuilderService.buildHTMLTemplate(String text)
и определяется как:
private TemplateEngine templateEngine;
@Autowired
public MailContentBuilderServiceImpl(TemplateEngine templateEngine) {
this.templateEngine = templateEngine;
}
@Override
public String buildHTMLTemplate(String message) {
StringBuilder html = new StringBuilder();
html.append("<!DOCTYPE html>");
html.append("<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:th=\"http://www.thymeleaf.org\"> ");
html.append("<head>");
html.append("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">");
html.append("<link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css\" integrity=\"sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T\" crossorigin=\"anonymous\">");
html.append("<script src=\"https://code.jquery.com/jquery-3.3.1.slim.min.js\" integrity=\"sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo\" crossorigin=\"anonymous\"></script>");
html.append("<script src=\"https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js\" integrity=\"sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1\" crossorigin=\"anonymous\"></script>");
html.append("<script src=\"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js\" integrity=\"sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM\" crossorigin=\"anonymous\"></script>");
html.append("</head>");
html.append("<body>");
html.append("<div class=\"container\">");
html.append("<div class=\"text-center\">");
html.append(message);
html.append("</div>");
html.append("</div>");
html.append("</body>");
html.append("</html>");
return html.toString();
}
Результат, который я получаю, когда пытаюсь зарегистрировать нового пользователя:

Как сделать так, чтобы он выглядел красиво, подчиняясь CSS, который он должен наследовать от CDN?
Я пытался использовать метод build
, как описано ниже (очевидно, указывая на правильный шаблон), но все равно не радость.
public String build(String message) {
Context context = new Context();
context.setVariable("message", message);
return templateEngine.process("mailTemplate", context);
}