浏览代码

Fix 修复邮件发送附件名不正确的问题

YueYunyun 6 月之前
父节点
当前提交
2461d24c53

+ 1 - 1
SourceCode/TenderCrawler/.script/Build_Dockerfile.run.xml

@@ -2,7 +2,7 @@
   <configuration default="false" name="Build_Dockerfile" type="docker-deploy" factoryName="dockerfile" activateToolWindowBeforeRun="false" server-name="81">
     <deployment type="dockerfile">
       <settings>
-        <option name="imageTag" value="y_tender-crawler-app:2.0.1" />
+        <option name="imageTag" value="y_tender-crawler-app:2.0.0" />
         <option name="buildOnly" value="true" />
         <option name="containerName" value="" />
         <option name="sourceFilePath" value="Dockerfile" />

+ 1 - 1
SourceCode/TenderCrawler/app/adapters/__init__.py

@@ -1,4 +1,4 @@
-from data_collection_adapter_interface import IDataCollectionAdapter
+from adapters.data_collection_adapter_interface import IDataCollectionAdapter
 from stores.data_store_interface import IDataStore
 
 

+ 1 - 1
SourceCode/TenderCrawler/app/drivers/__init__.py

@@ -1,6 +1,6 @@
 from selenium import webdriver
 
-from driver_creator import DriverCreator
+from drivers.driver_creator import DriverCreator
 
 
 def gen_driver(url: str) -> webdriver:

+ 5 - 2
SourceCode/TenderCrawler/app/utils/__init__.py

@@ -136,7 +136,7 @@ def send_email(
     body: str,
     body_is_html: bool = True,
     attachment_paths: str = None,
-):
+) -> bool:
     """
     发送电子邮件。
 
@@ -145,5 +145,8 @@ def send_email(
     :param body: 字符串,邮件正文。
     :param body_is_html: 布尔值,是否为HTML格式,默认为True。
     :param attachment_paths: 字符串,附件路径(可选)。
+    :return: 布尔值,表示邮件是否发送成功。
     """
-    EmailHelper().send_email(to_addr, subject, body, body_is_html, attachment_paths)
+    return EmailHelper().send_email(
+        to_addr, subject, body, body_is_html, attachment_paths
+    )

+ 9 - 3
SourceCode/TenderCrawler/app/utils/email_helper.py

@@ -3,6 +3,7 @@ from email import encoders
 from email.mime.base import MIMEBase
 from email.mime.multipart import MIMEMultipart
 from email.mime.text import MIMEText
+from email.header import Header
 
 
 class EmailHelper:
@@ -91,9 +92,14 @@ class EmailHelper:
             at_index = name.find("@")
             if at_index != -1:
                 name = name[at_index + 1 :]
-            part.add_header("Content-Disposition", f"attachment; filename= {name}")
-            part.add_header("Content-ID", "<0>")
-            part.add_header("X-Attachment-Id", "0")
+
+            # 使用 RFC 2047 编码文件名
+            encoded_name = Header(name, "utf-8").encode()
+            part.add_header(
+                "Content-Disposition", f"attachment; filename= {encoded_name}"
+            )
+            # part.add_header("Content-ID", "<0>")
+            # part.add_header("X-Attachment-Id", "0")
             encoders.encode_base64(part)
             msg.attach(part)
             utils.get_logger().info(f"添加附件 {name} {attachment_path} 到邮件中。")

+ 7 - 4
SourceCode/TenderCrawler/app/utils/logger_helper.py

@@ -1,7 +1,9 @@
-import logging, os, utils
+import logging, os
 from datetime import datetime
 from logging.handlers import TimedRotatingFileHandler
 
+from utils.config_helper import ConfigHelper
+
 
 class LoggerHelper:
     """
@@ -10,9 +12,10 @@ class LoggerHelper:
     """
 
     _instance = None
-    _log_file_name = f"{utils.get_config_value("logger.file_name", "crawler")}.log"
-    _log_file_path = utils.get_config_value("logger.file_path", "./logs")
-    _log_level_string = utils.get_config_value("logger.level", "INFO")
+    config = ConfigHelper()
+    _log_file_name = f"{config.get("logger.file_name", "crawler")}.log"
+    _log_file_path = config.get("logger.file_path", "./logs")
+    _log_level_string = config.get("logger.level", "INFO")
     _log_level = logging.getLevelName(_log_level_string)
 
     def __new__(cls, *args, **kwargs):

+ 1 - 1
SourceCode/TenderCrawler/docker-compose.yml

@@ -41,7 +41,7 @@ services:
 
   crawler-app:
     build: .
-    image: y_tender-crawler-app:2.0.1
+    image: y_tender-crawler-app:2.0.0
     container_name: y_tender-crawler-app
     depends_on:
       - crawler-mysql