package com.whyc.service; import com.whyc.constant.UserOperation; import com.whyc.dto.MailDTO; import com.whyc.dto.Response; import com.whyc.pojo.MailQueue; import com.whyc.util.ActionUtil; import com.whyc.util.MailUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.MailException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.mail.MessagingException; import java.util.Arrays; import java.util.Date; import java.util.LinkedList; import java.util.List; @Service public class MailService { @Autowired private MailUtil mailUtil; @Autowired private DocLogService logService; @Autowired private MailQueueService mailQueueService; @Transactional public Response sendMail(MailDTO mailDTO) { Long uId = ActionUtil.getUser().getId(); String name=ActionUtil.getUser().getName(); //日志内容准备 StringBuilder mailUserStr = new StringBuilder(); List mailList = mailDTO.getMailList(); for (int i = 0; i < mailList.size(); i++) { if(i==0){ mailUserStr.append(mailList.get(i)); }else{ mailUserStr.append(","+mailList.get(i)); } } try { mailUtil.sendMailBatch(name,mailDTO.getMailList(),mailDTO.getTitle(),mailDTO.getContent()); String msgDetail = "发送给邮箱" + mailUserStr + ",标题为:" + mailDTO.getTitle() + ",内容为:" + mailDTO.getContent(); logService.record(uId, name, UserOperation.TYPE_SEND_MAIL.getType(), "邮件发送", msgDetail); return new Response().set(1,true,"发送完成"); } catch (MessagingException | MailException ex) { //邮件发送异常,存入数据库待重新发送列表 MailQueue queue = new MailQueue(); queue.setMails(mailUserStr.toString()); queue.setTitle(mailDTO.getTitle()); queue.setContent(mailDTO.getContent()); queue.setCreateTime(new Date()); queue.setSenderUserId(uId); queue.setSenderUserName(name); mailQueueService.add(queue); return new Response().set(1,false,"发送失败,网络异常,网络恢复后自动延时发送"); } } public void sendQueueMail(MailQueue queue) { Long uId = queue.getSenderUserId(); String name = queue.getSenderUserName(); String mails = queue.getMails(); String[] mailSplits = mails.split(","); List mailList = new LinkedList<>(Arrays.asList(mailSplits)); try{ mailUtil.sendMailBatch(name,mailList,queue.getTitle(),queue.getContent()); //删除 数据库邮件队列表中 已被发送的邮件记录 mailQueueService.deleteById(queue.getId()); //日志 String msgDetail = "发送给邮箱" + mails + ",标题为:" + queue.getTitle() + ",内容为:" + queue.getContent(); logService.record(uId, name, UserOperation.TYPE_SEND_MAIL.getType(), "邮件因网络问题由系统延时发送", msgDetail); } catch (MessagingException | MailException ex) { //邮件发送异常 //System.out.println("邮件发送异常,后续会持续发送直到成功"); } } }