diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java index 2ef6c4720..0a782c6f2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java @@ -11,10 +11,16 @@ import org.springframework.core.io.Resource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; +import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; +import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; @Service("mailService") @@ -36,9 +42,34 @@ public class MailServiceImpl implements MailService { @Override public void sendSimpleMail(SimpleMail mail) throws MessagingException { + List imageSources = parseImages(mail.getContent()); + List cids = new ArrayList<>(); + if (!imageSources.isEmpty()) { + for (int i = 0; i < imageSources.size(); i++) { + cids.add(UUID.randomUUID().toString()); + } + mail.setContent(replaceImageSources(mail.getContent(), cids)); + } + MimeMultipart content = new MimeMultipart("related"); + BodyPart messageBodyPart = new MimeBodyPart(); + messageBodyPart.setContent(mail.getContent(), "text/html; charset=UTF-8"); + content.addBodyPart(messageBodyPart); + if (!imageSources.isEmpty()) { + for (int i =0; i < imageSources.size(); i++) { + MimeBodyPart imagePart = new MimeBodyPart(); + try { + imagePart.attachFile(applicationContext.getResource(imageSources.get(i)).getFile()); + imagePart.setContentID("<" + cids.get(i) + ">"); + imagePart.setDisposition(MimeBodyPart.INLINE); + content.addBodyPart(imagePart); + } catch (IOException | MessagingException e) { + logger.error(e.getMessage(), e); + } + } + } MimeMessage message = this.emailSender.createMimeMessage(); message.setSubject(mail.getSubject()); - message.setText(mail.getContent(), "utf-8", "html"); + message.setContent(content); message.addRecipients(Message.RecipientType.TO, mail.getTo()); message.setFrom(env.getProperty("mail.from")); this.emailSender.send(message); @@ -66,4 +97,39 @@ public class MailServiceImpl implements MailService { public String getMailTemplateSubject() { return env.getProperty("mail.subject"); } + + private List parseImages(String content) { + List imagePaths = new ArrayList<>(); + + int lastIndex = 0; + + while (lastIndex != -1) { + lastIndex = content.indexOf("img src=\"", lastIndex); + + if (lastIndex != -1) { + imagePaths.add(content.substring(lastIndex + 9, content.indexOf("\"", lastIndex + 9))); + lastIndex ++; + } + } + + return imagePaths; + } + + private String replaceImageSources(String content, List cids) { + + int lastIndex = 0; + int cidIndex = 0; + + while (lastIndex != -1) { + lastIndex = content.indexOf("img src=\"", lastIndex); + + if (lastIndex != -1) { + content = content.replace(content.substring(lastIndex + 9, content.indexOf("\"", lastIndex + 9)), "cid:" + cids.get(cidIndex)); + lastIndex ++; + cidIndex ++; + } + } + + return content; + } } diff --git a/dmp-backend/web/src/main/resources/templates/email/emailConfirmation.html b/dmp-backend/web/src/main/resources/templates/email/emailConfirmation.html index aca51690c..a83e48013 100644 --- a/dmp-backend/web/src/main/resources/templates/email/emailConfirmation.html +++ b/dmp-backend/web/src/main/resources/templates/email/emailConfirmation.html @@ -260,7 +260,7 @@
- OpenDMP + OpenDMP

Thank you for joining OpenDMP!

Please confirm that your email address is correct to continue.
The link will expire in {expiration_time}.