#!/usr/bin/env python3
"""
zio 서버 SMTP(localhost:25/587)를 통해 이메일 발송 테스트
서버에서 직접 실행
"""
import smtplib, ssl, socket
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from datetime import datetime

TO   = 'ythong86@gmail.com'
FROM = 'guardia@zioinfo.co.kr'
HOST = 'localhost'

def make_message(to, frm, subject, body_text, body_html=None):
    msg = MIMEMultipart('alternative')
    msg['Subject'] = subject
    msg['From']    = f'GUARDiA ITSM <{frm}>'
    msg['To']      = to
    msg['X-Mailer']= 'GUARDiA ITSM v2.0'
    msg.attach(MIMEText(body_text, 'plain', 'utf-8'))
    if body_html:
        msg.attach(MIMEText(body_html, 'html', 'utf-8'))
    return msg

html_body = f"""
<!DOCTYPE html>
<html lang="ko">
<head><meta charset="UTF-8"></head>
<body style="font-family: -apple-system, sans-serif; background:#f0f2f5; padding:40px 20px;">
  <div style="max-width:560px; margin:0 auto; background:#fff; border-radius:12px;
              box-shadow:0 4px 20px rgba(0,0,0,.1); overflow:hidden;">
    <!-- 헤더 -->
    <div style="background:#1a3a6b; padding:28px 32px;">
      <div style="display:flex; align-items:center; gap:12px;">
        <span style="font-size:32px;">🛡️</span>
        <div>
          <h1 style="color:#fff; margin:0; font-size:20px;">GUARDiA ITSM</h1>
          <p style="color:#aac4e8; margin:0; font-size:12px;">(주)지오정보기술 AI 인프라 자율 운영 플랫폼</p>
        </div>
      </div>
    </div>
    <!-- 본문 -->
    <div style="padding:32px;">
      <h2 style="color:#1a3a6b; margin:0 0 16px;">📧 이메일 발송 테스트</h2>
      <div style="background:#f0fdf4; border:1px solid #bbf7d0; border-radius:8px;
                  padding:16px 20px; margin-bottom:20px;">
        <p style="color:#166534; font-weight:700; margin:0 0 4px;">✅ 발송 성공</p>
        <p style="color:#475569; font-size:13px; margin:0;">
          zio 서버의 Postfix SMTP 서버를 통해 이메일이 정상 발송되었습니다.
        </p>
      </div>
      <table style="width:100%; border-collapse:collapse; font-size:13px;">
        <tr style="background:#f8fafc;">
          <td style="padding:10px 14px; font-weight:600; color:#64748b; border:1px solid #e2e8f0; width:30%;">발신 서버</td>
          <td style="padding:10px 14px; color:#1e293b; border:1px solid #e2e8f0;">mail.zioinfo.co.kr (101.79.17.164)</td>
        </tr>
        <tr>
          <td style="padding:10px 14px; font-weight:600; color:#64748b; border:1px solid #e2e8f0;">발신자</td>
          <td style="padding:10px 14px; color:#1e293b; border:1px solid #e2e8f0;">guardia@zioinfo.co.kr</td>
        </tr>
        <tr style="background:#f8fafc;">
          <td style="padding:10px 14px; font-weight:600; color:#64748b; border:1px solid #e2e8f0;">발송 시각</td>
          <td style="padding:10px 14px; color:#1e293b; border:1px solid #e2e8f0;">{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} KST</td>
        </tr>
        <tr>
          <td style="padding:10px 14px; font-weight:600; color:#64748b; border:1px solid #e2e8f0;">SMTP 포트</td>
          <td style="padding:10px 14px; color:#1e293b; border:1px solid #e2e8f0;">25 (Postfix)</td>
        </tr>
        <tr style="background:#f8fafc;">
          <td style="padding:10px 14px; font-weight:600; color:#64748b; border:1px solid #e2e8f0;">서버 OS</td>
          <td style="padding:10px 14px; color:#1e293b; border:1px solid #e2e8f0;">Ubuntu 24.04 LTS (NCloud)</td>
        </tr>
      </table>

      <div style="margin-top:24px; padding:16px 20px; background:#eff2ff; border-radius:8px;
                  border:1px solid #c7d2fe;">
        <p style="color:#1a3a6b; font-weight:700; margin:0 0 8px;">🤖 GUARDiA ITSM 기능 안내</p>
        <ul style="color:#475569; font-size:12px; margin:0; padding-left:18px; line-height:2;">
          <li>SR(서비스 요청) 접수 알림</li>
          <li>인시던트 발생 및 긴급 알림</li>
          <li>SLA 위반 경고</li>
          <li>배포 완료/실패 알림</li>
          <li>라이선스 만료 알림</li>
        </ul>
      </div>
    </div>
    <!-- 푸터 -->
    <div style="background:#f8fafc; padding:16px 32px; border-top:1px solid #e2e8f0;
                text-align:center; font-size:11px; color:#94a3b8;">
      이 메일은 GUARDiA ITSM 자동 발송 시스템에서 발송되었습니다.<br>
      (주)지오정보기술 | guardia@zioinfo.co.kr | http://101.79.17.164:8001
    </div>
  </div>
</body>
</html>
"""

text_body = f"""GUARDiA ITSM 이메일 발송 테스트

✅ 발송 성공
zio 서버의 Postfix SMTP 서버를 통해 이메일이 정상 발송되었습니다.

발신 서버: mail.zioinfo.co.kr (101.79.17.164)
발신자: guardia@zioinfo.co.kr
발송 시각: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} KST
SMTP 포트: 25 (Postfix)

GUARDiA ITSM 기능:
- SR(서비스 요청) 접수 알림
- 인시던트 발생 및 긴급 알림
- SLA 위반 경고
- 배포 완료/실패 알림

(주)지오정보기술 | guardia@zioinfo.co.kr
"""

print(f'수신자: {TO}')
print(f'발신자: {FROM}')
print(f'SMTP:   {HOST}:25')
print()

RESULTS = []
# 방법 1: localhost:25 직접 연결
print('--- 방법 1: Postfix localhost:25 ---')
try:
    msg = make_message(TO, FROM, f'[GUARDiA] 이메일 발송 테스트 - {datetime.now().strftime("%H:%M")}',
                       text_body, html_body)
    with smtplib.SMTP(HOST, 25, timeout=15) as smtp:
        smtp.ehlo('mail.zioinfo.co.kr')
        refused = smtp.sendmail(FROM, [TO], msg.as_string())
        if refused:
            print(f'FAIL 거부된 수신자: {refused}')
            RESULTS.append(('localhost:25', False, str(refused)))
        else:
            print('OK  발송 완료 (큐에 추가됨)')
            RESULTS.append(('localhost:25', True, '큐 등록 성공'))
except Exception as ex:
    print(f'FAIL {ex}')
    RESULTS.append(('localhost:25', False, str(ex)[:80]))

print()
print('--- 결과 ---')
for method, ok, detail in RESULTS:
    icon = 'OK  ' if ok else 'FAIL'
    print(f'{icon} {method}: {detail}')
