现在在此问题被标记为重复之前, Add image to freemarker template for mail?
此问题未提供我的问题的解决方案。 因此,我想在Freemarker HTML模板中添加图像作为背景,并将其附加到Java的Google Gmail API程序中。
以下是Freemarker的代码:-
<style>
body{
background-image: url("cid:${image.jpg}");
}
.container {
position: absolute;
padding:25px;
margin:25px;
border:5px;
text-align: justify;
text-justify: inter-word;
font-family: "Times New Roman";
font-style: italic;
}
</style>
我使用Google Gmail API插入图像的方式是:-
Multipart multipart = new MimeMultipart();
MimeBodyPart bodyPart = new MimeBodyPart();
Template t = freemarkerTemlate.getTemplate("OneEmployee.ftl");
String mailContent = FreeMarkerTemplateUtils.processTemplateIntoString(t, model);
bodyPart.setContent(mailContent, "text/html");
multipart.addBodyPart(bodyPart);
DataSource fds = new FileDataSource(Mailer.class.getClassLoader().getResource("images/image1.jpg").getFile());
bodyPart = new MimeBodyPart();
bodyPart.setDataHandler(new DataHandler(fds));
bodyPart.setHeader("Content-ID", "<image.jpg>");
multipart.addBodyPart(bodyPart);
我的图像位于资源目录中,该目录包含另一个图像目录
现在我已经尝试了几乎所有可能的代码变体,例如使用
<img src="">
添加CID:内的$ {},并且还没有使用“”,但它似乎没有设置Image在任何情况下。
在某些情况下,它运行时没有附加映像,在某些情况下,它运行但在控制台上也会引发错误:-
Application failed at {image1.jpg}:- Missing or Null Argument
我正在使用的模型是:-
Map model = new HashMap();
model.put("emailNames", emailNames);
我没有在模型中添加任何其他内容,因为这是我要插入到freemarker模板中的图像之外唯一的东西
我做错了什么还是错过了吗?
编辑2
我也尝试通过将Model设置为Key来通过Model插入Image 附加了代码以供参考
Map model = new HashMap();
model.put("emailNames", emailNames);
model.put("image.jpg", Mailer.class.getClassLoader().getResource("images/image1.jpg").getFile())
它仍然无法工作!
编辑2
有趣的是我注意到,当我不限定cid
,则它增加了背景图像作为附件,但每当我加入cid
语法它不添加作为附件,但它只是忽略邮件。
我在网上阅读到,根据教程,您没有将要插入的Image作为模型的一部分传递,而是将其添加为定义Image的content_id(cid)的附件。
谢谢
答案 0 :(得分:0)
所以最终我能够得到解决方案的答案
我从“资源”中的“图像”文件夹加载图像的方式是错误的
File file = new ClassPathResource("image").getFile();
这是做到这一点的方法
然后,将其传递给Freemarker模板时,您只需要做cid:imageURL
就可以了。
还应遵循@Bill Shannon和@Mark Rotteveel的评论