如何在除base64之外的java中的ftl模板中包含图像

时间:2018-02-09 12:23:41

标签: java email freemarker

我们需要从java发送邮件,我需要使用freemarker.template.Configuration类加载Ftl tempalte,该类有一个img src标记,我需要在classpath中添加一个图像。我尝试直接在img src标签中提供资源路径,但它没有用。然后我找到了一个使用Base64编码包含图像的解决方案。它适用于雷鸟,但不适用于webmail,outlook和gmail(这些邮件服务提供商不支持Base64嵌入式图像)。我试图在谷歌的一些其他方法,但没有得到一个正确的解决方案。如果我使用javaMailSender,可以通过以下链接

进行参考

https://memorynotfound.com/spring-mail-sending-email-freemarker-html-template-example/

但是对于我们的要求,我们需要将我们的邮件正文提供给其他一些会触发邮件的服务。所以在Short中如何在除了base64以外的java中将图像包含在ftl模板中。

public class mailTrigger {  

    @Autowired
    private Configuration freemarkerConfig;

    private String frameMail(final String userName) throws Exception {


        final Template t = freemarkerConfig.getTemplate("mailTemplate.ftl");


        ClassPathResource res = new ClassPathResource("classpath:logo.jpg");    
            File img = new File(res.getPath());

        byte[] imgBytes = IOUtils.toByteArray(new FileInputStream(img));
        byte[] imgBytesAsBase64 = Base64.encodeBase64(imgBytes);
        String imgDataAsBase64 = new String(imgBytesAsBase64);
        String logo = "data:image/png;base64," + imgDataAsBase64;


        final Map<String, Object> model = new HashMap();
        model.put("userName", userName);
        model.put("Logo", Logo);

        final String message = FreeMarkerTemplateUtils.processTemplateIntoString(t, model);

        return message;

    }
}

0 个答案:

没有答案