| | |
| | | import java.io.InputStream; |
| | | import java.util.*; |
| | | import java.util.regex.Pattern; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @BelongsProject: eCoWorksV3 |
| | |
| | | if (StringUtils.isBlank(m.getDocCode())) { |
| | | sql += "declare @docCode varchar(50) \n"; |
| | | sql += "exec sp_newdoccode 482101," + GridUtils.prossSqlParm(m.getUserCode()) + ",@docCode output \n"; |
| | | sql += "insert into t482101H(companyId,companyName,formId,docCode,docdate,PeriodID,postCode,postname,mailType,sender,receiver,cc,bcc,subject,userCode,userName,content,file_unid) values "; |
| | | sql += "insert into t482101H(companyId,companyName,formId,docCode,docdate,PeriodID,postCode,postname,mailType,sender,receiver," + |
| | | "cc,bcc,subject,userCode,userName,content,file_unid,messageId,read_flag,delete_flag) values "; |
| | | sql += "(" + GridUtils.prossSqlParm(m.getCompanyId()) + "," + GridUtils.prossSqlParm(m.getCompanyName()) + ",482101," + |
| | | "@docCode,convert(varchar(10),getdate(),120),convert(varchar(7),getdate(),120)," |
| | | + GridUtils.prossSqlParm(m.getUserCode()) + "," + GridUtils.prossSqlParm(m.getUserName()) + "," + |
| | | +m.getMailType() + "," + GridUtils.prossSqlParm(m.getSender()) + "," + |
| | | GridUtils.prossSqlParm(m.getReceiver()) + "," + GridUtils.prossSqlParm(m.getCc()) + "," + GridUtils.prossSqlParm(m.getBcc()) + "," + |
| | | GridUtils.prossSqlParm(m.getSubject()) + "," + GridUtils.prossSqlParm(m.getUserCode()) + "," + GridUtils.prossSqlParm(m.getUserName()) + "," + |
| | | GridUtils.prossSqlParm(m.getContent()) + "," + GridUtils.prossSqlParm(m.getFileUNID()) + ") \n"; |
| | | GridUtils.prossSqlParm(m.getContent()) + "," + GridUtils.prossSqlParm(m.getFileUNID()) + "," + GridUtils.prossSqlParm(m.getMessageId()) + "," + |
| | | m.getReadFlag() + "," + m.getDeleteFlag() + ") \n"; |
| | | sql += "select @docCode as docCode"; |
| | | String docCode = jdbcTemplate.queryForObject(sql, String.class); |
| | | if (StringUtils.isNotBlank(docCode)) { |
| | |
| | | sql += "declare @docCode varchar(50) \n"; |
| | | for (t482101HEntity m : mail) {//遍历内容 |
| | | sql += "exec sp_newdoccode 482101," + GridUtils.prossSqlParm(m.getUserCode()) + ",@docCode output \n"; |
| | | sql += "insert into t482101H(companyId,companyName,formId,docCode,docdate,PeriodID,postCode,postname,mailType,sender,receiver,cc,bcc,subject,userCode,userName,content,file_unid) values "; |
| | | sql += "insert into t482101H(companyId,companyName,formId,docCode,docdate,PeriodID,postCode,postname,mailType,sender,receiver," + |
| | | "cc,bcc,subject,userCode,userName,content,file_unid,messageId,read_flag,delete_flag) values "; |
| | | sql += "(" + GridUtils.prossSqlParm(m.getCompanyId()) + "," + GridUtils.prossSqlParm(m.getCompanyName()) + ",482101," + |
| | | "@docCode,convert(varchar(10),getdate(),120),convert(varchar(7),getdate(),120)," |
| | | + GridUtils.prossSqlParm(m.getUserCode()) + "," + GridUtils.prossSqlParm(m.getUserName()) + "," + |
| | | +m.getMailType() + "," + GridUtils.prossSqlParm(m.getSender()) + "," + |
| | | GridUtils.prossSqlParm(m.getReceiver()) + "," + GridUtils.prossSqlParm(m.getCc()) + "," + GridUtils.prossSqlParm(m.getBcc()) + "," + |
| | | GridUtils.prossSqlParm(m.getSubject()) + "," + GridUtils.prossSqlParm(m.getUserCode()) + "," + GridUtils.prossSqlParm(m.getUserName()) + "," + |
| | | GridUtils.prossSqlParm(m.getContent()) + "," + GridUtils.prossSqlParm(m.getFileUNID()) + ") \n"; |
| | | GridUtils.prossSqlParm(m.getContent()) + "," + GridUtils.prossSqlParm(m.getFileUNID()) + "," + GridUtils.prossSqlParm(m.getMessageId()) + "," + |
| | | m.getReadFlag() + "," + m.getDeleteFlag() + ") \n"; |
| | | // sql +="exec postt482101V3 '' ,'',''"; |
| | | } |
| | | jdbcTemplate.update(sql); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Integer deleteReceivingMail(String docCode) { |
| | | public Integer deleteReceivingMail(String userCode, String docCode) { |
| | | String sql = "set nocount on\n"; |
| | | try { |
| | | sql += "update t482101H deleteFlag=1 where docCode=" + GridUtils.prossSqlParm(docCode) + "\n";//标记为已删除 |
| | | sql += "update t482101H deleteFlag=1 where userCode=" + GridUtils.prossSqlParm(userCode) + " and docCode=" + GridUtils.prossSqlParm(docCode) + "\n";//标记删除 |
| | | sql += "select select @@ROWCOUNT"; |
| | | return jdbcTemplate.update(sql, Integer.class); |
| | | } catch (Exception e) { |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public Integer deleteReceivingMail(String messageId) { |
| | | String sql = "set nocount on\n"; |
| | | try { |
| | | sql += "delete t482101H where messageId=" + GridUtils.prossSqlParm(messageId) + "\n";//删除 |
| | | sql += "select select @@ROWCOUNT"; |
| | | return jdbcTemplate.update(sql, Integer.class); |
| | | } catch (Exception e) { |
| | |
| | | //获得收件箱的邮件列表 |
| | | Message[] messages = folder.search(flagTerm); |
| | | //返回邮箱封装内容 |
| | | return setMailContent(messages, request); |
| | | return setMailContent(messages, user, request); |
| | | } catch (NoSuchProviderException e) { |
| | | throw e; |
| | | } catch (MessagingException e) { |
| | |
| | | //根据当前用户查询绑定的邮箱信息 |
| | | T482102Entity emailEntity = emailAccountIfc.getAccountInfo(t482101H.getUserCode(), t482101H.getSender());//返回邮箱的账号信息 |
| | | if (emailEntity == null || StringUtils.isBlank(emailEntity.getEmail())) { |
| | | throw new Exception("找不到邮箱:" + t482101H.getSender() + "配置信息,请完善:" + t482101H.getSender() + "邮箱配置在尝试发送邮件"); |
| | | if (StringUtils.isBlank(t482101H.getDocCode())) { |
| | | t482101H.setMailType(0);//草稿箱状态 |
| | | t482101H = saveReceivingMail(t482101H);//保存到草稿箱内 |
| | | } |
| | | throw new Exception("找不到邮箱:" + t482101H.getSender() + "配置信息请完善。邮件已保存到草稿箱#" + t482101H.getDocCode()); |
| | | } |
| | | //有发送的邮件保存到后台数据库 |
| | | //邮箱服务器配置 |
| | | Properties properties = new Properties(); |
| | | properties.setProperty("mail.smtp.host", emailEntity.getSmtpHost()); |
| | |
| | | message.setFrom(new InternetAddress(sendEmail)); |
| | | message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipientEmail)); |
| | | message.setSubject(t482101H.getSubject()); |
| | | |
| | | String Unique_ID = UUID.randomUUID().toString();//unId码 |
| | | String message_id = "<onBus_" + Unique_ID + "_" + t482101H.getDocCode() + ">";//系统单号唯一码 |
| | | message.setHeader("Message-ID", message_id);//系统内部唯一码 |
| | | t482101H.setMessageId(message_id);//messageId赋值 |
| | | |
| | | if (StringUtils.isNotBlank(t482101H.getCc())) {//抄送 |
| | | String[] cc = t482101H.getCc().split(";"); |
| | |
| | | } |
| | | message.setContent(multipart); |
| | | try { |
| | | if(StringUtils.isBlank(t482101H.getDocCode())){//不在草稿箱有单号 |
| | | saveReceivingMail(t482101H);//保存后发送 |
| | | }else{ |
| | | t482101H.setMailType(2);//发件箱状态 |
| | | updateMailDrafts(t482101H);//更新成草稿箱 |
| | | } |
| | | Transport.send(message);//发送 |
| | | } catch (MessagingException m) {//异常处理 |
| | | } catch (MessagingException m) {//发送异常处理 |
| | | t482101H.setMailType(0);//草稿箱状态 |
| | | updateMailDrafts(t482101H);//更新成草稿箱 |
| | | throw new Exception("发送邮件异常,邮件已保存在草稿箱。异常原因:" + m.getCause() != null ? m.getCause().getMessage() : m.getMessage()); |
| | |
| | | * @throws MessagingException |
| | | * @throws IOException |
| | | */ |
| | | public List<t482101HEntity> setMailContent(Message[] messages, HttpServletRequest request) throws Exception { |
| | | public List<t482101HEntity> setMailContent(Message[] messages, String receiver, HttpServletRequest request) throws Exception { |
| | | try { |
| | | List<t482101HEntity> t482101HEntityList = new ArrayList<>(); |
| | | HttpSession session = request.getSession(); |
| | | List<String> messageIdList = getMessageIdList(receiver); |
| | | Message m = null; |
| | | for (int i = 0; i < messages.length; i++) { |
| | | m = messages[i]; |
| | | String from = MimeUtility.decodeText(m.getFrom()[0].toString()); |
| | | InternetAddress internetAddress = new InternetAddress(from); |
| | | String messageId = m.getHeader("Message-ID")[0]; |
| | | if (messageIdList != null && messageIdList.contains(messageId)) { |
| | | if (m.isSet(Flags.Flag.DELETED)) {//邮件是否需要删除 |
| | | //删除系统里的邮件 |
| | | deleteReceivingMail(messageId); |
| | | } |
| | | //已经存在就不需要再次封装处理 |
| | | continue; |
| | | } |
| | | |
| | | t482101HEntity mail = new t482101HEntity(); |
| | | if (m.isSet(Flags.Flag.SEEN)) { |
| | | // System.out.println("邮件已标记为已读。"); |
| | | mail.setMessageId(messageId);//获取邮件唯一ID |
| | | mail.setMailType(1);//收件 |
| | | if (m.isSet(Flags.Flag.SEEN)) {//邮件已标记为已读 |
| | | mail.setReadFlag(1);//已读 |
| | | } else { |
| | | // m.setFlag(Flags.Flag.SEEN, true);//标记成已读 |
| | | mail.setReadFlag(0);//已读 |
| | | } |
| | | if (m.isExpunged()) {//检查一个消息是否已被删除。 |
| | | mail.setDeleteFlag(1);//已删除 |
| | | } else { |
| | | mail.setDeleteFlag(0);//已删除 |
| | | } |
| | | mail.setMailType(1);//收件 |
| | | if (m.isSet(Flags.Flag.ANSWERED)) {//邮件是否已回复 |
| | | |
| | | } |
| | | if (m.isSet(Flags.Flag.DRAFT)) {//是否是草稿箱 |
| | | mail.setMailType(0);//是草稿箱 |
| | | } |
| | | |
| | | mail.setClassType(1); |
| | | mail.setUserCode((String) session.getAttribute(SessionKey.USERCODE)); |
| | | mail.setUserName((String) session.getAttribute(SessionKey.USERNAME)); |
| | |
| | | List<String> fileSeq = new ArrayList<>(); |
| | | MimeMultipart mimeMultipart = (MimeMultipart) m.getContent(); |
| | | String uuId = UUID.randomUUID().toString().toUpperCase();//生成uuid |
| | | result = getTextFromMimeMultipart(mimeMultipart, uuId, fileSeq,request); |
| | | result = getTextFromMimeMultipart(mimeMultipart, uuId, fileSeq, request); |
| | | if (fileSeq.size() > 0) {//有附件内容保存 |
| | | mail.setFileUNID(uuId + ";" + StringUtils.join(fileSeq, ";")); |
| | | } |
| | |
| | | result = m.getContent().toString(); |
| | | } |
| | | mail.setContent(result);//保存内容 |
| | | String from = MimeUtility.decodeText(m.getFrom()[0].toString()); |
| | | InternetAddress internetAddress = new InternetAddress(from); |
| | | mail.setSender(internetAddress.getAddress());//发件人 |
| | | |
| | | from = MimeUtility.decodeText(m.getRecipients(Message.RecipientType.TO)[0].toString()); |
| | | internetAddress = new InternetAddress(from); |
| | | mail.setReceiver(internetAddress.getAddress());//收件人 |
| | | |
| | | mail.setReceiver(receiver);//统一成一个收件人 |
| | | String cc = "";//抄送人 |
| | | Address[] ccAddress = m.getRecipients(Message.RecipientType.CC); |
| | | if (ccAddress != null && ccAddress.length > 0) { |
| | |
| | | } |
| | | cc = cc.substring(0, cc.lastIndexOf(";")); |
| | | } |
| | | mail.setCc(cc);//抄送人 |
| | | |
| | | String bcc = "";//抄送人 |
| | | mail.setCc(cc); |
| | | String bcc = "";//密送 |
| | | Address[] bccAddress = m.getRecipients(Message.RecipientType.BCC); |
| | | if (bccAddress != null && bccAddress.length > 0) { |
| | | for (Address c : bccAddress) { |
| | |
| | | } |
| | | |
| | | // 辅助方法,用于递归获取纯文本邮件内容 |
| | | private String getTextFromMimeMultipart(MimeMultipart mimeMultipart, String uuId, List<String> fileSeq,HttpServletRequest request) throws Exception { |
| | | private String getTextFromMimeMultipart(MimeMultipart mimeMultipart, String uuId, List<String> fileSeq, HttpServletRequest request) throws Exception { |
| | | int count = mimeMultipart.getCount(); |
| | | if (count == 0) { |
| | | throw new MessagingException("Multipart with no body parts"); |
| | |
| | | if (bodyPart.isMimeType("text/plain")) { |
| | | result.append(bodyPart.getContent()); |
| | | } else if (bodyPart.isMimeType("image/*")) {//图片 |
| | | result.append(saveFileAndImage(bodyPart, "image", uuId,request)); |
| | | result.append(saveFileAndImage(bodyPart, "image", uuId, request)); |
| | | } else if (Part.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition())) {//附件 |
| | | fileSeq.add(saveFileAndImage(bodyPart, Part.ATTACHMENT, uuId,request)); |
| | | fileSeq.add(saveFileAndImage(bodyPart, Part.ATTACHMENT, uuId, request)); |
| | | } else if (bodyPart.isMimeType("multipart/*")) { |
| | | result.append(getTextFromMimeMultipart((MimeMultipart) bodyPart.getContent(), uuId, fileSeq,request)); |
| | | result.append(getTextFromMimeMultipart((MimeMultipart) bodyPart.getContent(), uuId, fileSeq, request)); |
| | | } |
| | | } |
| | | } |
| | |
| | | return textPlainFound && textHtmlFound; |
| | | } |
| | | |
| | | private String saveFileAndImage(BodyPart bodyPart, String type, String unId,HttpServletRequest request) throws Exception { |
| | | private String saveFileAndImage(BodyPart bodyPart, String type, String unId, HttpServletRequest request) throws Exception { |
| | | try { |
| | | String fileName = MimeUtility.decodeText(bodyPart.getFileName()); |
| | | if (type.equals("image")) { |
| | |
| | | //输出 url |
| | | // return imgData.getImageUrl(attachmentWhereEntity.getUnid() + ";" + attachmentWhereEntity.getSeq(), null, |
| | | // null, true, true, null); |
| | | DataSourceEntity dataSourceEntity= MultiDataSource.getDataSourceMap(request); |
| | | DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request); |
| | | return shoppingImageServer + "/uploads/attachment/" + dataSourceEntity.getDbId() + "/482101/" + attachmentWhereEntity.getUnid() + "@p@" + attachmentWhereEntity.getSeq() + ".jpg"; |
| | | } else if (type.equals(Part.ATTACHMENT)) { |
| | | return attachmentWhereEntity.getSeq() + ""; |
| | |
| | | + " PhysicalPath,PhysicalFile,OriginalFileName,FileSize,FileType, \n" |
| | | + " AuthorCode,AuthorName,SmallPicPath,UploadTime,OriginalPicture \n" |
| | | + " from _sys_Attachment \n" |
| | | + " where unid = @unid " ; |
| | | + " where unid = @unid "; |
| | | if (seqs.size() > 0) { |
| | | sql += " and seq in(" + StringUtils.join(seqs, ",") + ")\n"; |
| | | } |
| | |
| | | } |
| | | return attachmentList; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getMessageIdList(String receiver) { |
| | | List<String> messageId = null; |
| | | String sql = " set nocount on \n"; |
| | | try { |
| | | sql += "select messageId from t482101H where receiver='" + receiver + "'"; |
| | | List<t482101HEntity> message = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(t482101HEntity.class)); |
| | | if (message != null && message.size() > 0) { |
| | | messageId = new ArrayList<>(); |
| | | messageId = message.stream().map(t482101HEntity::getMessageId).distinct().collect(Collectors.toList());//去重 |
| | | } |
| | | return messageId; |
| | | } catch (Exception e) { |
| | | throw e; |
| | | } |
| | | } |
| | | } |