Ola pessoal!
Estou com o seguinte problema :
tenho essa interface com esse método :
@Repository
public interface EmailRepository extends JpaRepository<Email, Long> {
@Query("select e from Email e join fetch e.attachments join fetch e.recipients where e.emailStatus in ?1")
public List<Email> getUnsentEmails(List<EmailStatus> emailStatus);
}
e a classe que executa essa método esta da seguinte forma :
public void sendEmails() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
List<Email> emails = this.emailRepository.getUnsentEmails(Arrays.asList(EmailStatus.NEW, EmailStatus.ERROR));
emails.forEach(s -> {
String[] recipients = s.getRecipients()
.stream()
.map(String::new)
.toArray(String[]::new);
try {
helper.setText(s.getMessage());
helper.setFrom(sender);
helper.setTo(recipients);
helper.setSubject(s.getTitle());
helper.setReplyTo(replyTo);
for (Attachment attachment : s.getAttachments()) {
helper.addAttachment(attachment.getFilename(), new ByteArrayResource(attachment.getData()));
}
} catch (MessagingException e) {
logger.error(e.getMessage(), e);
}
});
javaMailSender.send(mimeMessage);
}
Porem na hora de enviar os emails,mesmo tendo por exemplo 5 emails com status NEW, somente o último é enviado, estou achando que é problema nesses forEach aqui :
for (Attachment attachment : s.getAttachments()) {
helper.addAttachment(attachment.getFilename(), new ByteArrayResource(attachment.getData()));
porem não conseguir resolver o mesmo de outra forma. Aqui o getAttchments é Set que foi declarado na classe Email e o getRecipients é um List tambem declarado na classe Email, que no techo é convertida em um Array de String por causa do setTo do JavaMail.
Algum amigo saberia o que poderia esta ocorrendo e me aponta uma solução.
Obrigado