package org.akaza.openclinica.service; import org.akaza.openclinica.core.EmailEngine; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessagePreparator; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import javax.mail.internet.MimeMessage; import java.util.ArrayList; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Created by krikorkrumlian on 7/9/15. */ @Service public class BulkEmailSenderService { protected final Logger logger = LoggerFactory.getLogger(getClass().getName()); @Autowired private JavaMailSenderImpl mailSender; private static ConcurrentLinkedDeque<MimeMessagePreparator> DEQUE = new ConcurrentLinkedDeque<MimeMessagePreparator>(); public static void addMimeMessage(MimeMessagePreparator mimeMessage){ DEQUE.add(mimeMessage); } @Scheduled(fixedDelay=120000) private void sendEmail(){ ArrayList<MimeMessagePreparator> mimeMessages = new ArrayList<MimeMessagePreparator>(); logger.info("Executing now..." + mimeMessages.size() + " " + Thread.currentThread().getName() + " " + DEQUE.size()); MimeMessagePreparator mimeMessage = DEQUE.pollFirst(); if(mimeMessage == null) { logger.info("Nothing left to do getting out..."); return; } while(mimeMessage != null){ mimeMessages.add(mimeMessage); logger.info("In while loop"); if(mimeMessages.size() == 25){ logger.info("I've reached my limit..."); break; }else{ logger.info("Else"); mimeMessage = DEQUE.pollFirst(); } } logger.info("Sending Boom email..." + mimeMessages.size()); mailSender.send(mimeMessages.toArray(new MimeMessagePreparator[mimeMessages.size()])); logger.info("I think i sent my mail..." + mimeMessages.size()); sendEmail(); } }