Как добавить изображение как "встроенное вложение" с помощью Apache Velocity и JavaMail
Я знаю, что этот вопрос похож на этот вопрос здесь. Но я использую другую методологию электронной почты в Spring Framework, поэтому добавляю новый вопрос.
У меня есть изображение, сохраненное в / tmp / upload / image path на моей машине.
Взяв подробности из того же вопроса, упомянутого выше, я добавил следующие детали в свой шаблон скорости:
<div>
<img src="cid:${cid}" class="iconDetails" />
</div>
My Email Utility выполняет следующие действия:
@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);
}
И вот мой сервисный слой, откуда я привязываю свойства к HashMap, который я должен отправить в свой шаблон скорости:
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" содержит путь к моему файлу изображения, и я пытаюсь прикрепить его в шаблоне скорости.
Но изображение все еще не загружается в мой шаблон, который я отправляю по почте
К нему добавляется случайная ссылка, сгенерированная Google, поэтому изображение никогда не прикрепляется с самого начала.
Может кто-нибудь сказать мне, где я иду не так?
1 ответ
Добавьте встроенный элемент в MimeMessage MimeMessageHelper
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"));
}
});