- 37개 파일 IP → zioinfo.co.kr 치환 (소스/매뉴얼/설정/하네스) - Manager DrConsole/NetworkConsole/CsapConsole 빌드 + /var/www/manager/ 배포 - 테스트: Manager HTTP 200, ITSM 신규 API 7개 전체 200 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
147 lines
6.0 KiB
Python
147 lines
6.0 KiB
Python
#!/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}')
|