Browse Source

代码和配置优化,bug处理

Bob 8 months ago
parent
commit
dad83a9632
4 changed files with 33 additions and 24 deletions
  1. 2 2
      docker/Dockerfile
  2. 0 5
      pom.xml
  3. 28 14
      src/main/java/cn/kdan/listener/EmailListener.java
  4. 3 3
      src/main/resources/application.yml

+ 2 - 2
docker/Dockerfile

@@ -1,6 +1,6 @@
 FROM fabletang/jre8-alpine
 
-VOLUME /tmp
+RUN echo "Asia/shanghai" > /etc/timezone;
 ADD workflow_streamliner.jar app.jar
 RUN bash -c 'touch /app.jar'
-ENTRYPOINT java -Xms128m -Xmx256m -Dfile.encoding=utf-8 -Duser.timezone=GMT+8 -jar /app.jar
+ENTRYPOINT java -Xms128m -Xmx256m -Dfile.encoding=utf-8 -Duser.timezone=UTC+8 -jar /app.jar

+ 0 - 5
pom.xml

@@ -71,11 +71,6 @@
             <artifactId>hutool-all</artifactId>
             <version>5.8.2</version>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>org.springframework</groupId>-->
-<!--            <artifactId>spring-context</artifactId>-->
-<!--            <version>5.3.20</version>-->
-<!--        </dependency>-->
 
     </dependencies>
 

+ 28 - 14
src/main/java/cn/kdan/listener/EmailListener.java

@@ -16,6 +16,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
+import org.springframework.util.StringUtils;
 import org.springframework.web.client.RestTemplate;
 
 import javax.mail.*;
@@ -41,6 +42,9 @@ public class EmailListener {
     private String user;
     @Value("${workflow.customer_email.appPassword}")
     private String appPassword;
+    @Value("${workflow.customer_email.folder}")
+    private String folderStr;
+
     @Value("${workflow.customer_email.authorization}")
     private String authorization;
     @Value("${workflow.customer_email.channelId}")
@@ -51,7 +55,7 @@ public class EmailListener {
     private String postUrl;
 
     // 每小时执行一次,cron 表达式:"0 0 * * * ?"
-    @Scheduled(cron = "0 * * * * ?")
+    @Scheduled(cron = "0 0 * * * ?")
     public void executeTask() {
         log.info("定时监听邮件收件箱: {}", new Date());
         // 设置邮件服务器属性
@@ -69,29 +73,39 @@ public class EmailListener {
             // 使用应用专用密码
             store.connect(user, appPassword);
             // 打开收件箱,用户反馈,INBOX
-            Folder folder = store.getFolder("用户反馈");
+            Folder folder = store.getFolder(folderStr);
             folder.open(Folder.READ_ONLY);
             Message[] totalMessages =  folder.getMessages();
-            log.info("用户反馈收件箱总计邮件数: {}", totalMessages.length);
-            // 过滤时间,获取当前时间和一小时前的时间
+            log.info("打开收件箱完成,{}收件箱总计邮件数: {}", folderStr, totalMessages.length);
+            Calendar calendar1 = Calendar.getInstance();
+            calendar1.add(Calendar.HOUR_OF_DAY, -48);
+            Date folderTime = calendar1.getTime();
+            // 获取近两天邮件
+            ReceivedDateTerm searchTerm = new ReceivedDateTerm(ComparisonTerm.GE, folderTime);
+            Message[] messages = folder.search(searchTerm);
+            log.info("近两天收件箱邮件数: {}", messages.length);
+            if(messages.length <= 0) {
+                return;
+            }
+            // 过滤时间,获取一小时前的时间 和 前两天的时间
             Calendar calendar = Calendar.getInstance();
-            Date endTime = calendar.getTime();
             calendar.add(Calendar.HOUR_OF_DAY, -1);
             Date startTime = calendar.getTime();
-            // 使用 ReceivedDateTerm 获取邮件
-            ReceivedDateTerm searchTerm = new ReceivedDateTerm(ComparisonTerm.GE, startTime);
-            Message[] messages = folder.search(searchTerm);
-            log.info("收件箱最近邮件数: {}", messages.length);
+            log.info("查询邮件开始时间: {}", startTime);
             // 遍历条件获取到的邮件
             for (Message message : messages) {
                 Date receivedDate = message.getReceivedDate();
-                // 再次过滤(防止搜索条件不精确导致包含一小时之前的邮件)
-                if (receivedDate == null || receivedDate.before(startTime) || receivedDate.after(endTime)) {
+                // 再次过滤,因为上面的邮件搜索只能按天,这次过滤最近一小时
+                if (receivedDate == null || receivedDate.before(startTime)) {
                     continue;
                 }
                 // 处理查找到的邮件
                 log.info("处理邮件,MessageNumber:{}", message.getMessageNumber());
                 String subject = message.getSubject();
+                if (StringUtils.isEmpty(subject)) {
+                    log.warn("邮件主题为空,跳过");
+                    continue;
+                }
                 log.info("过滤邮件主题: {}", subject);
                 // 过滤邮件主题 和 反馈类型
                 EmailSubjectEnum emailSubjectEnum = EmailSubjectEnum.getByLikeValue(subject);
@@ -125,9 +139,9 @@ public class EmailListener {
                 mattermostCreatePost.setChannel_id(channelId);
                 String content = "### 收到一封新邮件"
                         + "\n**From: **" + EmailUtil.extractTargetEmail(message.getFrom()[0].toString())
-                        + "\n**Subject: **" + subject
-                        + "\n**ReceivedDate: **" + receivedDate
-                        + "\n**Content: **" + EmailUtil.getTextFromMessage(message)
+                        + "\n**邮件主题: **" + subject
+                        + "\n**收件时间: **" + receivedDate
+                        + "\n**内容: **" + EmailUtil.getTextFromMessage(message)
                         + "\n" + atPeople;
                 mattermostCreatePost.setMessage(content);
 

+ 3 - 3
src/main/resources/application.yml

@@ -44,9 +44,9 @@ workflow:
     port: ${CUSTOMER_EMAIL_PORT:993}
     user: ${CUSTOMER_EMAIL_USER:support@pdfreaderpro.com}
     appPassword: ${CUSTOMER_EMAIL_APP_PASSWORD:8etrVHCSUBEt}
+    folder: ${CUSTOMER_EMAIL_FOLDER:用户反馈}
     authorization: ${MATTERMOST_AUTHORIZATION:Bearer p5xyd6ne53nrtk5bnfsrwg6xww}
-    channelId: ${MATTERMOST_CHANNEL_ID:6ydsewxfnfnxbec6iqqji7yijo}
+    channelId: ${MATTERMOST_CHANNEL_ID:6ydsewxfnfnxbec6iqqji7yijo} #测试频道
+#    channelId: ${MATTERMOST_CHANNEL_ID:faq8k7gx5tfg9f6tkofbggtj5y}
     fileUrl: ${MATTERMOST_FILE_URL:https://chat.kdan.cc/api/v4/files}
     postUrl: ${MATTERMOST_POST_URL:https://chat.kdan.cc/api/v4/posts}
-    #  user: ${USER:liubo@kdanmobile.com}
-    #  appPassword: ${APP_PASSWORD:fiuz dhyf djyt kaws}