xinyb
3 天以前 3b74e3df72726e188d36393ecfd7964d095ef7e8
src/com/yc/crm/mail/service/MailServiceImpl.java
@@ -18,11 +18,11 @@
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.search.ComparisonTerm;
import javax.mail.search.ReceivedDateTerm;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import static com.yc.crm.mail.service.MailImpl.shoppingImageServer;
@@ -94,11 +94,19 @@
//            FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN), true);
//            Message[] messages = folder.search(flagTerm);
            //获取收件箱邮件(全部)
            Message[] messages = folder.getMessages();
            //获取收件箱邮件(30天)
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String time=emailEntity.getCreateTime();
            Date dateTime=sdf.parse(time);
            Date thirtyDaysAgo = new Date(dateTime.getTime() - (30 * 24 * 60 * 60 * 1000L)); // 30天前的日期
            Message[] messages = folder.search(new ReceivedDateTerm(ComparisonTerm.GE, thirtyDaysAgo));
//            SearchTerm start=new FromTerm(new date)
//            SearchTerm end=new BeforeTerm(new Date(""));//开始
//            Message[] messages = folder.search(new AndTerm(start,end));//folder.getMessages();
            //邮箱封装保存
            setMailContent(messages, emailEntity, foundation);
            setMailContent(messages, emailEntity, foundation,false);
        } catch (NoSuchProviderException e) {
            throw e;
        } catch (MessagingException e) {
@@ -279,132 +287,119 @@
     * @throws IOException
     */
    @Override
    public void setMailContent(Message[] messages, T482102Entity email, FoundationEntity foundation) throws
    public void setMailContent(Message[] messages, T482102Entity email, FoundationEntity foundation,boolean hasPush) throws
            Exception {
        try {
            List<t482101HEntity> t482101HEntityList = new ArrayList<>();
            List<String> messageIdList = mailIfc.getMessageIdList(email.getReceiveEmail());//存在系统表里的邮件
            Message m = null;
            LocalDate startTime = LocalDate.parse(email.getCreateTime().split(" ")[0]);//创建时间
            LocalDate endTime = LocalDate.parse(email.getUpdateTime().split(" ")[0]);//更新时间
            if (startTime.equals(endTime)) {
                startTime = endTime.minusDays(30);
            } else {
                startTime = endTime;
                endTime = LocalDate.now();
            }
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date nowTime = new Date();
            for (int i = 0; i < messages.length; i++) {
                m = messages[i];
                Date deliveryTime = m.getReceivedDate();//收件时间
                Date senderTime = m.getSentDate();//发件时间
                if (deliveryTime == null) {
                String messageId = m.getHeader("Message-ID")[0];
                if (messageIdList != null && messageIdList.contains(messageId)) {//存在就不组装
                    continue;
                }
                Date deliveryTime = m.getReceivedDate();//收件时间
                Date senderTime = m.getSentDate();//发件时间
                if (senderTime == null) {
                    senderTime = senderTime;
                }
                LocalDate sendDate = deliveryTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                if ((sendDate.isAfter(startTime) || sendDate.isEqual(startTime)) &&
                        (sendDate.isBefore(endTime) || sendDate.isEqual(endTime))) {//时间段获取邮件
                    t482101HEntity mail = new t482101HEntity();
                    String messageId = m.getHeader("Message-ID")[0];
                    if (messageIdList != null && messageIdList.contains(messageId)) {//存在就不组装
                        continue;
                    }
                    mail.setSenderTime(sdf.format(senderTime));//发件时间
                    mail.setReceivingTime(sdf.format(deliveryTime));//收件时间
                    mail.setMessageId(messageId);//获取邮件唯一ID
                    mail.setMailType(1);//收件
                    if (m.isSet(Flags.Flag.SEEN)) {//邮件已标记为已读
                        mail.setReadFlag(1);//已读
                    }
                    if (m.isExpunged()) {//检查一个消息是否已被删除。‌
                        mail.setDeleteFlag(1);//已删除
                    }
                    if (m.isSet(Flags.Flag.ANSWERED)) {//邮件是否已回复
                    }
                    if (m.isSet(Flags.Flag.DRAFT)) {//是否是草稿箱
                        mail.setMailType(0);//是草稿箱
                    }
                    mail.setUserCode(foundation.getUserCode());
                    mail.setUserName(foundation.getUserName());
                    mail.setCompanyId(foundation.getCompanyId());
                    mail.setCompanyName(foundation.getCompanyName());
                    mail.setClassType(1);
                    mail.setSubject(m.getSubject());//标题
                    Date date = m.getReceivedDate();//时间
                    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    mail.setReceiveTime(formatter.format(date));
                    String result = "";
                    StringBuilder plainText = new StringBuilder();//纯文本
                    if (m.isMimeType("text/plain")) {
                        plainText.append(m.getContent());
                    } else if (m.isMimeType("text/html")) {//html格式
                        result = m.getContent().toString();
                    } else if (m.isMimeType("multipart/*")) {
                        MailFileEntity mailFile = new MailFileEntity();//附件
                        List<MailFileEntity.MailBodyPart> part = new ArrayList<>();
                        String unId = UUID.randomUUID().toString().toUpperCase();
                        StringBuilder attachment = new StringBuilder();
                        result = getTextFromMimeMultipart((MimeMultipart) m.getContent(), plainText, part, unId, attachment, foundation.getDbId());
                        mailFile.setPart(part);
                        mailFile.setUnId(unId);//生成uuid
                        mail.setMailFile(mailFile);//附件添加到里面
                        if (StringUtils.isNotBlank(attachment)) {//附件游标保存
                            mail.setAttachFlag(1);
                            mail.setAttachmentList(unId + attachment.toString());
                        }
                    } else {
                        result = m.getContent().toString();
                    }
                    mail.setContent(result);//保存内容
                    mail.setPlainText(plainText.toString().trim());//明文
                    String from = MimeUtility.decodeText(m.getFrom()[0].toString());
                    InternetAddress internetAddress = new InternetAddress(from);
                    mail.setSenderName(internetAddress.getPersonal());//发件人名称
                    mail.setSender(internetAddress.getAddress());//发件人
                    from = MimeUtility.decodeText(m.getRecipients(Message.RecipientType.TO)[0].toString());
                    internetAddress = new InternetAddress(from);
//                mail.setReceiver(internetAddress.getAddress());//收件人
                    List<String> receivers = new ArrayList<>();//抄送人
                    receivers.add(email.getReceiveEmail());
                    mail.setReceiver(receivers);//统一成一个收件人
                    Address[] ccAddress = m.getRecipients(Message.RecipientType.CC);
                    if (ccAddress != null && ccAddress.length > 0) {
                        List<String> cc = new ArrayList<>();//抄送人
                        for (Address c : ccAddress) {
                            from = MimeUtility.decodeText(c.toString());
                            internetAddress = new InternetAddress(from);
                            cc.add(internetAddress.getAddress());
                        }
                        mail.setCc(cc);
                    }
                    Address[] bccAddress = m.getRecipients(Message.RecipientType.BCC);
                    if (bccAddress != null && bccAddress.length > 0) {
                        List<String> bcc = new ArrayList<>();//密送
                        for (Address c : bccAddress) {
                            from = MimeUtility.decodeText(c.toString());
                            internetAddress = new InternetAddress(from);
                            bcc.add(internetAddress.getAddress());
                        }
                        mail.setBcc(bcc);//密送人
                    }
                    t482101HEntityList.add(mail);
                t482101HEntity mail = new t482101HEntity();
                mail.setSenderTime(sdf.format(senderTime));//发件时间
                mail.setReceivingTime(sdf.format(deliveryTime));//收件时间
                mail.setMessageId(messageId);//获取邮件唯一ID
                mail.setMailType(1);//收件
                if (m.isSet(Flags.Flag.SEEN)) {//邮件已标记为已读
                    mail.setReadFlag(1);//已读
                }
                if (m.isExpunged()) {//检查一个消息是否已被删除。‌
                    mail.setDeleteFlag(1);//已删除
                }
                if (m.isSet(Flags.Flag.ANSWERED)) {//邮件是否已回复
                }
                if (m.isSet(Flags.Flag.DRAFT)) {//是否是草稿箱
                    mail.setMailType(0);//是草稿箱
                }
                mail.setUserCode(foundation.getUserCode());
                mail.setUserName(foundation.getUserName());
                mail.setCompanyId(foundation.getCompanyId());
                mail.setCompanyName(foundation.getCompanyName());
                mail.setClassType(1);
                mail.setSubject(m.getSubject());//标题
                Date date = m.getReceivedDate();//时间
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                mail.setReceiveTime(formatter.format(date));
                String result = "";
                StringBuilder plainText = new StringBuilder();//纯文本
                if (m.isMimeType("text/plain")) {
                    plainText.append(m.getContent());
                } else if (m.isMimeType("text/html")) {//html格式
                    result = m.getContent().toString();
                } else if (m.isMimeType("multipart/*")) {
                    MailFileEntity mailFile = new MailFileEntity();//附件
                    List<MailFileEntity.MailBodyPart> part = new ArrayList<>();
                    String unId = UUID.randomUUID().toString().toUpperCase();
                    StringBuilder attachment = new StringBuilder();
                    result = getTextFromMimeMultipart((MimeMultipart) m.getContent(), plainText, part, unId, attachment, foundation.getDbId());
                    mailFile.setPart(part);
                    mailFile.setUnId(unId);//生成uuid
                    mail.setMailFile(mailFile);//附件添加到里面
                    if (StringUtils.isNotBlank(attachment)) {//附件游标保存
                        mail.setAttachFlag(1);
                        mail.setAttachmentList(unId + attachment.toString());
                    }
                } else {
                    result = m.getContent().toString();
                }
                mail.setContent(result);//保存内容
                mail.setPlainText(plainText.toString().trim());//明文
                String from = MimeUtility.decodeText(m.getFrom()[0].toString());
                InternetAddress internetAddress = new InternetAddress(from);
                mail.setSenderName(internetAddress.getPersonal());//发件人名称
                mail.setSender(internetAddress.getAddress());//发件人
                from = MimeUtility.decodeText(m.getRecipients(Message.RecipientType.TO)[0].toString());
                internetAddress = new InternetAddress(from);
//                mail.setReceiver(internetAddress.getAddress());//收件人
                List<String> receivers = new ArrayList<>();//抄送人
                receivers.add(email.getReceiveEmail());
                mail.setReceiver(receivers);//统一成一个收件人
                Address[] ccAddress = m.getRecipients(Message.RecipientType.CC);
                if (ccAddress != null && ccAddress.length > 0) {
                    List<String> cc = new ArrayList<>();//抄送人
                    for (Address c : ccAddress) {
                        from = MimeUtility.decodeText(c.toString());
                        internetAddress = new InternetAddress(from);
                        cc.add(internetAddress.getAddress());
                    }
                    mail.setCc(cc);
                }
                Address[] bccAddress = m.getRecipients(Message.RecipientType.BCC);
                if (bccAddress != null && bccAddress.length > 0) {
                    List<String> bcc = new ArrayList<>();//密送
                    for (Address c : bccAddress) {
                        from = MimeUtility.decodeText(c.toString());
                        internetAddress = new InternetAddress(from);
                        bcc.add(internetAddress.getAddress());
                    }
                    mail.setBcc(bcc);//密送人
                }
                t482101HEntityList.add(mail);
            }
            if (t482101HEntityList.size() > 0) {
                String docCodeList = mailIfc.saveReceivingMailList(t482101HEntityList);//保存
                mailAccountIfc.updateEmailTime(email.getAccountId());//更新一次配置
                //发送通知(极光和webscoket)
                //取用户的手机号
                BaseService baseService = (BaseService) FactoryBean.getBean("BaseService");
                String tel = baseService.getJdbcTemplate().queryForObject("select tel  from    _sys_LoginUser where usercode=" + GridUtils.prossSqlParm(foundation.getUserCode()), String.class);
                MailPush.pushEmailInfo(t482101HEntityList, docCodeList, foundation.getDbId(), tel);
//                mailAccountIfc.updateEmailTime(email.getAccountId());//更新一次配置
                if(hasPush) {//是否推送消息
                    //发送通知(极光和webscoket)
                    //取用户的手机号
                    BaseService baseService = (BaseService) FactoryBean.getBean("BaseService");
                    String tel = baseService.getJdbcTemplate().queryForObject("select tel  from    _sys_LoginUser where usercode=" + GridUtils.prossSqlParm(foundation.getUserCode()), String.class);
                    MailPush.pushEmailInfo(t482101HEntityList, docCodeList, foundation.getDbId(), tel);
                }
            }
        } catch (Exception e) {
            throw e;