Я использую Spring Boot и Thymeleaf для отправки электронных писем. У меня есть одно встроенное изображение в качестве подписи в электронном письме. Все работает нормально, если я отправляю по одному письму за раз. Но мой вариант использования - отправить отдельное письмо списку получателей. Я могу сделать это без изображения. Но когда я добавляю изображение, первое электронное письмо отправляется, и во второй раз я получаю class path resource [images/tp-logo.png] cannot be opened because it does not exist
.
- Когда я вызываю emailService.send () из stream.forEach (), я получить выше ошибка.
- Когда я вызываю его из нормального для l oop, он работает нормально.
Я понимаю, что потоки ленивы, но почему ресурс отсутствует ?
Рабочий код метода вызывающего абонента:
for(ContactIfo contact : contactInfoList) {
ExecutorService emailExecutor = Executors.newCachedThreadPool();
emailExecutor.execute(() -> {
final String emailAddress = contact.getEmailAddress();
if (StringUtils.isNotBlank(emailAddress)) {
emailService.sendEmail(emailAddress);
}
});
}
Код метода вызывающего абонента:
contactInfoList.parallelStream().forEach(contact -> {
ExecutorService emailExecutor = Executors.newCachedThreadPool();
emailExecutor.execute(() -> {
final String emailAddress = contact.getEmailAddress();
if (StringUtils.isNotBlank(emailAddress)) {
emailService.sendEmail(emailAddress);
}
});
});
Callee:
private void sendEmail(Mail mail) throws MessagingException {
MimeMessage message = emailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,
MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED,
StandardCharsets.UTF_8.name());
Context context = new Context();
context.setVariables(mail.getProps());
String html = templateEngine.process("me-event-update-template", context);
helper.setText(html , true);
helper.setTo(mail.getMailTo());
helper.setSubject(mail.getSubject());
helper.setFrom(mail.getFrom());
// adding inline resources with matching cId to the variable name/value
helper.addInline("logo", new ClassPathResource("images/logo.png"), "image/png");
emailSender.send(message);
}