Просмотр исходного кода

fix:修复邮箱附件下载很慢的问题

wangzaijun 1 неделя назад
Родитель
Сommit
706f9328c7

+ 3 - 2
mo-daq/src/main/java/com/smppw/modaq/application/util/EmailUtil.java

@@ -294,8 +294,9 @@ public class EmailUtil {
             props.put("mail.imap.starttls.enable", "true");
             props.put("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
             props.put("mail.imap.socketFactory.fallback", "false");
-//            // 设置数据块大小为 64k(可调整)
-//            props.put("mail.imap.fetchsize", "65536");
+            // 关闭读取附件时分批获取 BASE64 输入流的配置
+            props.put("mail.imap.partialfetch", false);
+            props.put("mail.imaps.partialfetch", false);
         }
         return props;
     }

+ 1 - 1
mo-daq/src/main/java/com/smppw/modaq/domain/dto/EmailContentInfoDTO.java

@@ -72,7 +72,7 @@ public class EmailContentInfoDTO implements Serializable {
     /**
      * 附件大小byte
      */
-    private Long fileSize;
+    private int fileSize;
 
     @Override
     public boolean equals(Object o) {

+ 4 - 0
mo-daq/src/main/java/com/smppw/modaq/domain/entity/EmailParseInfoDO.java

@@ -58,6 +58,10 @@ public class EmailParseInfoDO {
     @TableField(value = "fail_reason")
     private String failReason;
     /**
+     * 附件文件大小,byte
+     */
+    private Integer attrSize;
+    /**
      * 记录的有效性;1-有效;0-无效;
      */
     @TableField(value = "isvalid")

+ 8 - 3
mo-daq/src/main/java/com/smppw/modaq/domain/service/EmailParseService.java

@@ -404,6 +404,7 @@ public class EmailParseService {
         emailParseInfoDO.setEmailTitle(emailContentInfoDTO.getEmailTitle());
         emailParseInfoDO.setEmailType(emailContentInfoDTO.getEmailType());
         emailParseInfoDO.setParseStatus(EmailParseStatusConst.SUCCESS);
+        emailParseInfoDO.setAttrSize(emailContentInfoDTO.getFileSize());
         emailParseInfoDO.setIsvalid(1);
         emailParseInfoDO.setCreatorId(0);
         emailParseInfoDO.setCreateTime(new Date());
@@ -488,7 +489,7 @@ public class EmailParseService {
             } catch (Exception e) {
                 log.error("获取邮箱的邮件{} 报错,堆栈信息:{}", emailTitle, ExceptionUtil.stacktraceToString(e));
             } finally {
-                if (log.isInfoEnabled()) {
+                if (log.isInfoEnabled() && emailTitle != null) {
                     log.info("邮件{} 下载完成,总计耗时{} ms", emailTitle, System.currentTimeMillis() - start);
                 }
             }
@@ -509,7 +510,11 @@ public class EmailParseService {
 
             String fileName = MimeUtility.decodeText(part.getFileName());
             emailContentInfoDTO.setFileName(fileName);
-            emailContentInfoDTO.setFileSize((long) part.getSize());
+            emailContentInfoDTO.setFileSize(part.getSize());
+
+            if (log.isInfoEnabled()) {
+                log.info("邮件{} 大小:{}byte 开始下载。。。。。", subject, part.getSize());
+            }
 
             String realPath = filePath + emailDate + fileName;
 
@@ -526,7 +531,7 @@ public class EmailParseService {
                 cn.hutool.core.io.FileUtil.del(saveFile);
                 FileUtil.saveFile(saveFile, part);
             }
-            emailContentInfoDTO.setFilePath(realPath);
+            emailContentInfoDTO.setFilePath(saveFile.getAbsolutePath());
 
             emailContentInfoDTO.setEmailAddress(account);
             emailContentInfoDTO.setEmailTitle(subject);

+ 5 - 3
mo-daq/src/main/resources/mapper/EmailParseInfoMapper.xml

@@ -12,6 +12,7 @@
         <result column="email_type" property="emailType"/>
         <result column="parse_status" property="parseStatus"/>
         <result column="fail_reason" property="failReason"/>
+        <result column="attr_size" property="attrSize"/>
         <result column="isvalid" property="isvalid"/>
         <result column="creatorid" property="creatorId"/>
         <result column="createtime" property="createTime"/>
@@ -23,9 +24,9 @@
 
     <insert id="insert" parameterType="com.smppw.modaq.domain.entity.EmailParseInfoDO" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
         insert into mo_email_parse_info(email,email_key, sender_email, email_date, parse_date, email_title, email_type, parse_status, fail_reason,
-                                     isvalid, creatorid, createtime, updaterid, updatetime)
+                                        attr_size,isvalid, creatorid, createtime, updaterid, updatetime)
         values (#{itemDo.email}, #{itemDo.emailKey}, #{itemDo.senderEmail}, #{itemDo.emailDate}, #{itemDo.parseDate}, #{itemDo.emailTitle}, #{itemDo.emailType}, #{itemDo.parseStatus},
-                #{itemDo.failReason}, #{itemDo.isvalid}, #{itemDo.creatorId}, #{itemDo.createTime}, #{itemDo.updaterId}, #{itemDo.updateTime})
+                #{itemDo.failReason}, #{itemDo.attrSize}, #{itemDo.isvalid}, #{itemDo.creatorId}, #{itemDo.createTime}, #{itemDo.updaterId}, #{itemDo.updateTime})
     </insert>
 
     <update id="updateParseStatus">
@@ -46,6 +47,7 @@
             epi.email_type,
             epi.parse_status,
             epi.fail_reason,
+            epi.attr_size,
             epi.isvalid,
             epi.creatorid,
             epi.createtime,
@@ -129,7 +131,7 @@
     </select>
 
     <select id="queryById" resultMap="BaseResultMap">
-        select id, email,email_key, email_date, parse_date, email_title, email_type, sender_email,parse_status
+        select id, email,email_key, email_date, parse_date, email_title, email_type, sender_email,parse_status,attr_size
         from mo_email_parse_info
         where isvalid = 1
           and id = #{id}