首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Apache Velocity和JavaMail将图像添加为“内联附件”

如何使用Apache Velocity和JavaMail将图像添加为“内联附件”
EN

Stack Overflow用户
提问于 2018-03-22 16:14:38
回答 1查看 721关注 0票数 1

我知道这个问题类似于这个问题here。但是,我在Spring Framework中使用了一种不同的电子邮件方法,因此添加了一个新问题。

我的机器中有一个存储在/tmp/upload/image路径下的映像。

从上面提到的相同问题中获取详细信息,我在Velocity模板中添加了以下详细信息:

代码语言:javascript
复制
<div>
   <img src="cid:${cid}" class="iconDetails" />                                           
</div>

我的电子邮件实用程序执行以下操作:

代码语言:javascript
复制
@Async
public void sendOrderMail(String emailAddress, String templateName, String link) {
    MimeMessage mimeMessage = sender.createMimeMessage();
    MimeMessageHelper helper;
    try {
        helper = new MimeMessageHelper(mimeMessage, false, "utf-8");

        helper.setTo(emailAddress);
        helper.setFrom("no-reply@abc.com");
        helper.setSubject(emailTitle);
        helper.setText("");

        mimeMessage.setContent(templateName, "text/html");
    }  catch (Exception e) {
        log.info("Error in sending mail : " + e.getMessage());
    }
    sender.send(mimeMessage);
    log.info("Mail successfully sent to : " + emailAddress);
}

这是我的服务层,我从这里将属性绑定到我应该发送到Velocity模板的HashMap:

代码语言:javascript
复制
    double totalPayable = total + totalServiceCharge;

    Organization org = orgRepo.findOne(order.getEvent().getOrgId());
    User user = userRepo.findUserByEmail(org.getCreatedBy());
    Event event = eventRepo.findOne(order.getEvent().getEventId());

    String image = imagePath.concat(event.getInfo().getImage());
    // String inlineHtml = "<img src=\"cid:" + image + "\">";

    // URL url = new URL(image);


    Map vmMap = new HashMap<>();
    vmMap.put("orderNo", order.getSummary().getOrderId());
    vmMap.put("totalCost", total);
    vmMap.put("totalPayable", totalPayable);
    vmMap.put("eventName", order.getEvent().getEventName());
    vmMap.put("serviceCharges", totalServiceCharge);
    vmMap.put("createdBy", user.getProfile().getFirstName() + " " + user.getProfile().getLastName());
    vmMap.put("cid", image);

    String pdfTemplate = velocityUtility.getTemplatetoText("templates/paidOrderEmail.vm", vmMap);

   emailUtility.sendOrderMail(order.getBuyer().getEmail(), pdfTemplate, link);

" image“对象包含我的图像文件的路径,我正在尝试将其附加到Velocity模板中。

但是图像仍然没有加载到我的模板中,我正在通过邮件发送

它附加一些随机的谷歌生成的链接到它,所以图像永远不会被附加在第一个地方。

有人能告诉我我哪里错了吗?

EN

回答 1

Stack Overflow用户

发布于 2021-10-04 04:49:06

将内联元素添加到MimeMessage MimeMessageHelper

代码语言:javascript
复制
mailSender.send(new MimeMessagePreparator() {
           public void prepare(MimeMessage mimeMessage) throws MessagingException {
             MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
             helper.setFrom("me@mail.com");
             helper.setTo("you@mail.com");
             helper.setSubject("my subject");
             helper.setText("my text <img src='cid:myLogo'>", true);
             helper.addInline("myLogo", new ClassPathResource("img/mylogo.gif"));
             helper.addAttachment("myDocument.pdf", new ClassPathResource("doc/myDocument.pdf"));
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49423588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档