Files
ewoooc/scripts/archive/check_email_status.py
OoO d88dcc8f75
All checks were successful
CD Pipeline / deploy (push) Successful in 1m45s
fix(devops): 清理舊端口與危險 compose 操作
2026-04-30 14:24:53 +08:00

100 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
快速查詢郵件發送狀態
"""
import sys
from pathlib import Path
PROJECT_ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(PROJECT_ROOT))
from database.vendor_manager import VendorDatabaseManager
from database.vendor_models import EmailSendLog
from datetime import datetime, timedelta
def check_email_status():
"""查詢最近的郵件發送狀態"""
db = VendorDatabaseManager()
session = db.get_session()
try:
# 查詢最近 7 天的發送記錄
since = datetime.now() - timedelta(days=7)
logs = session.query(EmailSendLog).filter(
EmailSendLog.created_at >= since
).order_by(EmailSendLog.created_at.desc()).all()
if not logs:
print("\n❌ 最近 7 天沒有郵件發送記錄")
print("\n💡 提示:")
print(" 1. 請先在網頁上選擇缺貨商品並點擊「按廠商發送」或「按商品發送」")
print(" 2. 或者執行測試腳本python3 test_email_send.py")
return
print("\n" + "=" * 80)
print(f"📧 最近 7 天郵件發送記錄 (共 {len(logs)} 筆)")
print("=" * 80)
# 統計
success_count = sum(1 for log in logs if log.status == 'sent')
failed_count = sum(1 for log in logs if log.status == 'failed')
pending_count = sum(1 for log in logs if log.status == 'pending')
print(f"\n📊 統計:")
print(f" ✅ 成功: {success_count}")
print(f" ❌ 失敗: {failed_count}")
print(f" ⏳ 待發送: {pending_count}")
if success_count > 0:
rate = (success_count / len(logs)) * 100
print(f" 📈 成功率: {rate:.1f}%")
print(f"\n📋 詳細記錄:")
print("-" * 80)
for log in logs[:20]: # 只顯示最近 20 筆
status_icon = "" if log.status == 'sent' else "" if log.status == 'failed' else ""
print(f"\n{status_icon} ID: {log.id} | 批次: {log.batch_id}")
print(f" 收件者: {log.recipient_email}")
print(f" 主旨: {log.subject}")
print(f" 商品數: {log.product_count}")
print(f" 狀態: {log.status}")
print(f" 時間: {log.sent_at or log.created_at}")
if log.error_message:
print(f" ⚠️ 錯誤: {log.error_message}")
if log.attachment_filename:
print(f" 📎 附件: {log.attachment_filename}")
if len(logs) > 20:
print(f"\n... 還有 {len(logs) - 20} 筆記錄(請使用網頁查看完整記錄)")
# 提示如何確認
print("\n" + "=" * 80)
print("💡 如何確認對方真的收到郵件?")
print("=" * 80)
print("1. 登入收件信箱檢查yingpin_chen@pchome.tw")
print("2. 檢查垃圾郵件資料夾(第一次發送可能被誤判)")
print("3. 查看網頁記錄http://localhost/vendor-stockout/send-email")
print("\n⚠️ 注意:")
print(" - 狀態「成功」= Gmail SMTP 已接收郵件")
print(" - 但不保證對方信箱一定收到(可能被退信或進垃圾桶)")
print(" - 建議先發測試郵件到自己的信箱確認格式")
print("=" * 80)
except Exception as e:
print(f"\n❌ 查詢失敗: {e}")
import traceback
traceback.print_exc()
finally:
session.close()
if __name__ == '__main__':
check_email_status()