Почему я не могу отправить украшенное CSS html письмо по весне? - PullRequest
0 голосов
/ 07 июня 2019

Я успешно отправил текстовое электронное письмо, и нижеприведенная реализация отправляет действительно базовые электронные письма в формате 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();
}  

Результат, который я получаю, когда пытаюсь зарегистрировать нового пользователя:

enter image description here

Как сделать так, чтобы он выглядел красиво, подчиняясь CSS, который он должен наследовать от CDN?

Я пытался использовать метод build, как описано ниже (очевидно, указывая на правильный шаблон), но все равно не радость.

public String build(String message) {
    Context context = new Context();
    context.setVariable("message", message);
    return templateEngine.process("mailTemplate", context);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...