Java Velocity模板无法以html格式解析和显示数据

Java Velocity模板无法以html格式解析和显示数据,java,spring,jakarta-mail,velocity,apache-velocity,Java,Spring,Jakarta Mail,Velocity,Apache Velocity,我有一个简单的电子邮件程序,用Java和Spring编写,带有Velocity模板,用于格式化发送电子邮件的数据,这些数据应以html格式显示。但是,它只显示数据以及嵌入其中的html标记,而不实际解析它们 我有什么遗漏吗 EmailService.java public class EmailService { private static final Log LOG = LogFactory.getLog(EmailService.class); private static

我有一个简单的电子邮件程序,用
Java
Spring
编写,带有
Velocity
模板,用于格式化发送电子邮件的数据,这些数据应以
html
格式显示。但是,它只显示数据以及嵌入其中的
html
标记,而不实际解析它们

我有什么遗漏吗

EmailService.java

public class EmailService {
    private static final Log LOG = LogFactory.getLog(EmailService.class);
    private static final String EMAIL_SUBJECT = ":: Risk Assessment Job Summary Results::";
    private final MailSender mailSender;
    private final String emailRecipientAddress;
    private final String emailSenderAddress;
    private static final String ERROR_MSG = "Error while sending notification email";
    private final TemplateFactory velocityTemplateFactory;
    private Template riskAssessmentJobResultSummaryTemplate;

    public EmailService(MailSender mailSender, String emailRecipientAddress,
            String emailSenderAddress, TemplateFactory velocityTemplateFactory) {
        this.mailSender = mailSender;
        this.emailRecipientAddress = emailRecipientAddress;
        this.emailSenderAddress = emailSenderAddress;
        this.velocityTemplateFactory = velocityTemplateFactory;
    }

    public void notify(String messageBody) {
        JavaMailSender javaMailSender = (JavaMailSender)mailSender;
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message);
        try {
            mimeMessageHelper.setSubject(getHostname() + " - " + EMAIL_SUBJECT);
            mimeMessageHelper.setTo(emailRecipientAddress);
            mimeMessageHelper.setFrom(emailSenderAddress);
            mimeMessageHelper.setText(getEmailContent(messageBody));
            javaMailSender.send(message);
        } catch (MailException e) {
            throw new EmailSendException(ERROR_MSG, e);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

    private static String getHostname() {
        try {
            return InetAddress.getLocalHost().getHostName();
        } catch (UnknownHostException e) {
            return "unknown host";
        }
    }

    private String getEmailContent(String messageBody) {
        try {
            StringWriter stringWriter = new StringWriter();
            this.riskAssessmentJobResultSummaryTemplate =
                    velocityTemplateFactory.create("velocity/risk-assessment-job-results-summary.vm");
            VelocityContext velocityContext = new VelocityContext();
            velocityContext.put("hostname", getHostname());
            velocityContext.put("messageBody", messageBody);
            this.riskAssessmentJobResultSummaryTemplate.merge(velocityContext, stringWriter);
            return stringWriter.toString();
        } catch (IOException ex) {
            LOG.error("Unable to read the email template", ex);
            return null;
        }
    }
}
风险评估工作结果摘要。vm

<h3>Summary report for Risk Assessment Job on ${hostname}:</h3>
<table style="border:none;">
    <tr><td>${messageBody}</td></tr>
</table>

将内容设置为html

 message.setContent(getEmailContent(messageBody), "text/html; charset=utf-8")

这应该是答案

mimeMessageHelper.setContent(someHtmlMessage, "text/html; charset=utf-8");
找到冒烟的枪:)

这一行更改解决了问题。此处的
true
标志表示电子邮件正文中的内容类型为
html

mimeMessageHelper.setText(getEmailContent(messageBody), true);

您是否尝试将该字符串发送到电子邮件?因为我认为你的程序运行得很好,这个字符串非常适合发送电子邮件!问题是电子邮件中的内容是否想知道否决投票的原因?您提出的解决方案无法解决此问题。更改需要在java代码中进行,而不是在template.ahh中!好了。我跑得太快了,想都不敢想。我只是看了一下我的程序,比较了你的模板和我的模板,认为这可能是错误的。请看
mimeMessageHelper.setContent(someHtmlMessage, "text/html; charset=utf-8");
mimeMessageHelper.setText(getEmailContent(messageBody), true);