whyclxw
2 天以前 e81a9becf6e180df535ee430a958960f1546dda5
src/main/java/com/whyc/service/MailService.java
@@ -2,13 +2,19 @@
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
@@ -20,12 +26,14 @@
    @Autowired
    private DocLogService logService;
    @Autowired
    private MailQueueService mailQueueService;
    @Transactional
    public void sendMail(MailDTO mailDTO) throws MessagingException {
    public Response sendMail(MailDTO mailDTO) {
        Long uId = ActionUtil.getUser().getId();
        String name=ActionUtil.getUser().getName();
        mailUtil.sendMailBatch(name,mailDTO.getMailList(),mailDTO.getTitle(),mailDTO.getContent());
        //日志
        //日志内容准备
        StringBuilder mailUserStr = new StringBuilder();
        List<String> mailList = mailDTO.getMailList();
        for (int i = 0; i < mailList.size(); i++) {
@@ -35,8 +43,41 @@
                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);
            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<String> 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("邮件发送异常,后续会持续发送直到成功");
        }
    }
}