| | |
| | | |
| | | 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; |
| | |
| | | // 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) { |
| | |
| | | * @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; |