Some checks failed
CD Pipeline / deploy (push) Failing after 59s
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml) - 部署模式: rsync Python 檔案至 188 → docker restart (volume mount) - Dockerfile/requirements 變動時自動重建 Docker image - 部署通知: Telegram (開始/成功/失敗) - 健康檢查: https://mo.wooo.work/health (最多 5 次重試) - 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
110 lines
3.5 KiB
Python
110 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
測試 ms1.pchome.tw SMTP 伺服器
|
|
"""
|
|
|
|
import smtplib
|
|
import sys
|
|
|
|
def test_smtp_detailed(host, ports=[25, 587, 465]):
|
|
"""詳細測試 SMTP 伺服器"""
|
|
|
|
print("=" * 80)
|
|
print(f"🔍 測試 SMTP 伺服器: {host}")
|
|
print("=" * 80)
|
|
|
|
successful_config = None
|
|
|
|
for port in ports:
|
|
print(f"\n📡 測試埠號: {port}")
|
|
print("-" * 80)
|
|
|
|
try:
|
|
print(f" 正在連接 {host}:{port} ...")
|
|
server = smtplib.SMTP(host, port, timeout=10)
|
|
|
|
print(f" ✅ 連接成功!")
|
|
|
|
# 取得伺服器資訊
|
|
response = server.ehlo()
|
|
print(f" 伺服器回應碼: {response[0]}")
|
|
|
|
# 檢查支援的功能
|
|
print(f"\n 支援的功能:")
|
|
if server.has_extn('STARTTLS'):
|
|
print(f" ✅ STARTTLS (加密)")
|
|
if server.has_extn('AUTH'):
|
|
print(f" ✅ AUTH (認證)")
|
|
if server.has_extn('SIZE'):
|
|
size = server.esmtp_features.get('size', 'unknown')
|
|
print(f" ✅ SIZE (郵件大小限制: {size})")
|
|
|
|
# 測試 STARTTLS
|
|
if server.has_extn('STARTTLS'):
|
|
try:
|
|
print(f"\n 測試 STARTTLS 加密...")
|
|
server.starttls()
|
|
print(f" ✅ STARTTLS 啟動成功")
|
|
server.ehlo() # 重新 EHLO
|
|
|
|
# 記錄成功的設定
|
|
if not successful_config:
|
|
successful_config = {
|
|
'host': host,
|
|
'port': port,
|
|
'tls': True
|
|
}
|
|
|
|
except Exception as e:
|
|
print(f" ⚠️ STARTTLS 失敗: {e}")
|
|
|
|
server.quit()
|
|
print(f"\n ✅ 埠號 {port} 測試成功")
|
|
|
|
except ConnectionRefusedError:
|
|
print(f" ❌ 連接被拒絕(埠號可能未開放)")
|
|
except Exception as e:
|
|
print(f" ❌ 錯誤: {e}")
|
|
|
|
# 顯示結果
|
|
print("\n" + "=" * 80)
|
|
print("📊 測試結果")
|
|
print("=" * 80)
|
|
|
|
if successful_config:
|
|
print(f"\n✅ 找到可用的 SMTP 設定:")
|
|
print(f" 伺服器: {successful_config['host']}")
|
|
print(f" 埠號: {successful_config['port']}")
|
|
print(f" 加密: {'STARTTLS' if successful_config['tls'] else '無'}")
|
|
|
|
print(f"\n💡 建議的 .env 設定:")
|
|
print(f" EMAIL_HOST={successful_config['host']}")
|
|
print(f" EMAIL_PORT={successful_config['port']}")
|
|
print(f" EMAIL_HOST_USER=yingpin_chen@pchome.tw")
|
|
print(f" EMAIL_HOST_PASSWORD=您的密碼")
|
|
print(f" EMAIL_SENDER=yingpin_chen@pchome.tw")
|
|
|
|
return successful_config
|
|
else:
|
|
print(f"\n❌ 所有埠號都無法連接")
|
|
print(f"\n可能需要:")
|
|
print(f" 1. 連接到公司內部網路")
|
|
print(f" 2. 使用 VPN")
|
|
print(f" 3. 確認伺服器地址正確")
|
|
return None
|
|
|
|
if __name__ == '__main__':
|
|
config = test_smtp_detailed('ms1.pchome.tw')
|
|
|
|
if config:
|
|
print("\n" + "=" * 80)
|
|
print("🎉 測試成功!現在可以更新 .env 設定了")
|
|
print("=" * 80)
|
|
sys.exit(0)
|
|
else:
|
|
print("\n" + "=" * 80)
|
|
print("❌ 測試失敗,請檢查網路連線或聯絡 IT 部門")
|
|
print("=" * 80)
|
|
sys.exit(1)
|