UtilityLibAPI 1.2512.502__tar.gz → 1.2512.503__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {utilitylibapi-1.2512.502/src/UtilityLibAPI.egg-info → utilitylibapi-1.2512.503}/PKG-INFO +1 -1
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/pyproject.toml +1 -1
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI/MailSenderLib.py +68 -1
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503/src/UtilityLibAPI.egg-info}/PKG-INFO +1 -1
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/LICENSE +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/README.md +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/setup.cfg +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI/Archive7zLib.py +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI/EnDeCodeLib.py +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI/ExtWrapper7zLib.py +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI/SessionVARLib.py +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI/__init__.py +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI.egg-info/SOURCES.txt +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI.egg-info/dependency_links.txt +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI.egg-info/requires.txt +0 -0
- {utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI.egg-info/top_level.txt +0 -0
|
@@ -35,6 +35,74 @@ class CLASS_MailSender:
|
|
|
35
35
|
# ======================================================================
|
|
36
36
|
self.OnAfterSendSuccess: Optional[Callable[[str], None]] = None
|
|
37
37
|
self.OnAfterSendFailure: Optional[Callable[[str], None]] = None
|
|
38
|
+
# ============================================================
|
|
39
|
+
# ⭐⭐ 新增:維持 SMTP 連線用變數
|
|
40
|
+
# ============================================================
|
|
41
|
+
self.CVobj_Server: Optional[smtplib.SMTP] = None
|
|
42
|
+
|
|
43
|
+
# ################################################################################
|
|
44
|
+
# [預防 Mail Server 中斷連線]
|
|
45
|
+
# 手動控制連線
|
|
46
|
+
# mailer.CUF_Open()
|
|
47
|
+
# mailer.CUF_SendMail(...)
|
|
48
|
+
# mailer.CUF_Close()
|
|
49
|
+
# ------------------------------------------------------------
|
|
50
|
+
# 每 5 分鐘預防性重連
|
|
51
|
+
# mailer.CUF_Reconnect()
|
|
52
|
+
# ------------------------------------------------------------
|
|
53
|
+
# 如果 SendMail 失敗,要重連
|
|
54
|
+
# if not mailer.CUF_SendMail(...):
|
|
55
|
+
# mailer.CUF_Reconnect()
|
|
56
|
+
# ################################################################################
|
|
57
|
+
|
|
58
|
+
# ================================================================================
|
|
59
|
+
# ⭐⭐⭐ 新增函數:CUF_Open() ⭐⭐⭐
|
|
60
|
+
# ================================================================================
|
|
61
|
+
def CUF_Open(self) -> bool:
|
|
62
|
+
"""建立 SMTP 連線(長連線模式)"""
|
|
63
|
+
try:
|
|
64
|
+
if self.CVobj_Server:
|
|
65
|
+
return True
|
|
66
|
+
|
|
67
|
+
if self.Pmb_UseSSL:
|
|
68
|
+
server = smtplib.SMTP_SSL(self.Pms_SMTP_Server, self.Pmi_Port)
|
|
69
|
+
else:
|
|
70
|
+
server = smtplib.SMTP(self.Pms_SMTP_Server, self.Pmi_Port)
|
|
71
|
+
server.ehlo()
|
|
72
|
+
server.starttls()
|
|
73
|
+
|
|
74
|
+
server.login(self.Pms_Account, self.Pms_Password)
|
|
75
|
+
self.CVobj_Server = server
|
|
76
|
+
return True
|
|
77
|
+
except Exception as e:
|
|
78
|
+
print("❌ CUF_Open Error:", e)
|
|
79
|
+
self.CVobj_Server = None
|
|
80
|
+
return False
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# ================================================================================
|
|
84
|
+
# ⭐⭐⭐ 新增函數:CUF_Close() ⭐⭐⭐
|
|
85
|
+
# ================================================================================
|
|
86
|
+
def CUF_Close(self):
|
|
87
|
+
"""關閉 SMTP 長連線"""
|
|
88
|
+
try:
|
|
89
|
+
if self.CVobj_Server:
|
|
90
|
+
try:
|
|
91
|
+
self.CVobj_Server.quit()
|
|
92
|
+
except:
|
|
93
|
+
pass
|
|
94
|
+
self.CVobj_Server = None
|
|
95
|
+
except:
|
|
96
|
+
self.CVobj_Server = None
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
# ================================================================================
|
|
100
|
+
# ⭐⭐⭐ 新增函數:CUF_Reconnect() ⭐⭐⭐
|
|
101
|
+
# ================================================================================
|
|
102
|
+
def CUF_Reconnect(self) -> bool:
|
|
103
|
+
"""強制重新連線"""
|
|
104
|
+
self.CUF_Close()
|
|
105
|
+
return self.CUF_Open()
|
|
38
106
|
|
|
39
107
|
|
|
40
108
|
#------------------------------------------------------------
|
|
@@ -152,7 +220,6 @@ class CLASS_MailSender:
|
|
|
152
220
|
return False
|
|
153
221
|
|
|
154
222
|
|
|
155
|
-
|
|
156
223
|
# ================================================================================
|
|
157
224
|
# [範例]
|
|
158
225
|
# 匯入剛才寫好的 CLASS_MailSender
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI.egg-info/requires.txt
RENAMED
|
File without changes
|
{utilitylibapi-1.2512.502 → utilitylibapi-1.2512.503}/src/UtilityLibAPI.egg-info/top_level.txt
RENAMED
|
File without changes
|