java - Velocity 模板无法解析和显示 html 格式的数据

标签 java spring jakarta-mail velocity apache-velocity

我有一个用 JavaSpring 编写的简单电子邮件程序,带有 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;
        }
    }
}

风险评估工作结果-summary.vm

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

实际电子邮件输出:

<h3>Summary report for Risk Assessment Job on KOP-DBT0J12:</h3> 
<table style="border:none;">
<tr><td>
TotalTxPending: 0
TotalTxAccepted: 0
TotalTxRejected: 0
TotalTxProcessed: 0
</td></tr>
</table>

预期的电子邮件输出:

Summary report for Risk Assessment Job on KOP-DBT0J12:
TotalTxPending: 0
TotalTxAccepted: 0
TotalTxRejected: 0
TotalTxProcessed: 0

最佳答案

设置内容为html

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

关于java - Velocity 模板无法解析和显示 html 格式的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45065230/

相关文章:

java - 如何从 pagedList 中删除项目

java - 在 WebApp 中创建和下载大型 ZIP(来自多个 BLOB)的最佳实践

java - Spring Security 自定义消息 "Authentication method not supported: GET"

java - Spring启动测试: run script in a nested test (@Sql ("/script.sql"))

java - 使用 Javamail 从 Gmail 下载 Word 文档

java - 为什么说 Erlang 比 Java 和 C++ 更适合网页游戏中的服务器端编程?

java - Spring 配置

JavaMail 保存密码

java - 如何使用 Apache 文件上传启用附件

java - 如何定义我自己的元素类以用于 Set