Authored by zhengyouwei

邮件异步发送

... ... @@ -7,10 +7,15 @@ 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.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* Created by yoho on 2016/7/6.
... ... @@ -20,25 +25,39 @@ public class MailServiceImpl implements MailService {
protected static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
private BlockingQueue<Mail> blockingQueue = new ArrayBlockingQueue<Mail>(5000);
@Autowired
private JavaMailSenderImpl senderImpl;
@Override
public boolean sendHTMLMail(Mail mail) {
try {
MimeMessage mailMessage = senderImpl.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
messageHelper.setTo(mail.getReceivers());
messageHelper.setFrom("YOHO-OPERATION@yoho.cn");
messageHelper.setSubject(mail.getSubject());
messageHelper.setCc(mail.getCc());
messageHelper.setText(mail.getMessage(), true);
senderImpl.send(mailMessage);
return true;
}catch (Exception e){
logger.error("send email failed!to:{}", e);
return false;
return blockingQueue.offer(mail);
}
//异步发送邮件
@Scheduled(fixedDelay = 10 * 1000)
public void send() {
int size = blockingQueue.size();
if (size == 0){
return;
}
List<Mail> list = new ArrayList<>(size);
blockingQueue.drainTo(list,size);
for (Mail mail : list){
try {
MimeMessage mailMessage = senderImpl.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
messageHelper.setTo(mail.getReceivers());
messageHelper.setFrom("YOHO-OPERATION@yoho.cn");
messageHelper.setSubject(mail.getSubject());
messageHelper.setCc(mail.getCc());
messageHelper.setText(mail.getMessage(), true);
senderImpl.send(mailMessage);
} catch (Exception e) {
logger.error("send email failed!to:{}", e);
}
}
}
}
\ No newline at end of file
... ...