zioinfo-web/deploy/guardia_mail_v3.py
DESKTOP-TKLFCPRython 1e98f0d04a refactor: 101.79.17.164 → zioinfo.co.kr 전체 도메인 변환 + Manager UI 배포
- 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>
2026-05-31 10:09:17 +09:00

108 lines
4.1 KiB
Python

"""
GUARDiA 이메일 발송 v3 — 피싱 경고 제거
핵심 수정: IP 직접 링크 제거, 도메인 사용, 간결한 본문
"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate, make_msgid
from datetime import datetime
TO = 'ythong86@gmail.com'
FROM = 'guardia@zioinfo.co.kr'
DOMAIN = 'zioinfo.co.kr'
NOW = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# 텍스트 본문 — IP 링크 없음, 간결하게
text = (
'안녕하세요,\n\n'
'(주)지오정보기술 GUARDiA ITSM 메일 서버 테스트입니다.\n\n'
'이 메일은 zio 서버의 Postfix + OpenDKIM 정상 동작을 확인하기 위해 발송되었습니다.\n\n'
'발신자: guardia@' + DOMAIN + '\n'
'발송 시각: ' + NOW + ' KST\n\n'
'-- \n'
'(주)지오정보기술\n'
'guardia@' + DOMAIN + '\n'
)
# HTML 본문 — IP 링크 완전 제거, 심플하게
html = (
'<!DOCTYPE html>\n'
'<html lang="ko">\n'
'<head><meta charset="UTF-8"><title>GUARDiA ITSM</title></head>\n'
'<body style="margin:0;padding:20px;font-family:Arial,sans-serif;'
'background:#f5f5f5;color:#333333">\n'
'<table width="560" cellpadding="0" cellspacing="0" border="0" '
'align="center" style="background:#ffffff;border-radius:6px">\n'
' <tr>\n'
' <td style="background:#1a3a6b;padding:20px 28px;border-radius:6px 6px 0 0">\n'
' <p style="color:#ffffff;margin:0;font-size:18px;font-weight:bold">'
'GUARDiA ITSM</p>\n'
' <p style="color:#aac4e8;margin:4px 0 0;font-size:12px">'
'(주)지오정보기술</p>\n'
' </td>\n'
' </tr>\n'
' <tr>\n'
' <td style="padding:24px 28px">\n'
' <p style="margin:0 0 12px;font-size:15px;color:#1a3a6b;font-weight:bold">'
'메일 서버 테스트</p>\n'
' <p style="margin:0 0 16px;font-size:13px;line-height:1.7;color:#444">\n'
' zio 서버의 메일 서비스가 정상 동작하고 있습니다.<br>\n'
' 본 메일은 시스템 점검 목적으로 발송되었습니다.\n'
' </p>\n'
' <table cellpadding="7" cellspacing="0" border="0" '
'style="border-collapse:collapse;font-size:13px;width:100%">\n'
' <tr style="background:#f8f8f8">\n'
' <td style="border:1px solid #e0e0e0;color:#666;width:30%">발신자</td>\n'
' <td style="border:1px solid #e0e0e0;color:#333">'
'guardia@' + DOMAIN + '</td>\n'
' </tr>\n'
' <tr>\n'
' <td style="border:1px solid #e0e0e0;color:#666">발송 시각</td>\n'
' <td style="border:1px solid #e0e0e0;color:#333">' + NOW + ' KST</td>\n'
' </tr>\n'
' <tr style="background:#f8f8f8">\n'
' <td style="border:1px solid #e0e0e0;color:#666">SPF / DKIM</td>\n'
' <td style="border:1px solid #e0e0e0;color:#2e7d32">인증 완료</td>\n'
' </tr>\n'
' </table>\n'
' </td>\n'
' </tr>\n'
' <tr>\n'
' <td style="padding:12px 28px;border-top:1px solid #eeeeee;'
'text-align:center;font-size:11px;color:#999999;border-radius:0 0 6px 6px">\n'
' (주)지오정보기술 &nbsp;|&nbsp; guardia@' + DOMAIN + '\n'
' </td>\n'
' </tr>\n'
'</table>\n'
'</body>\n'
'</html>\n'
)
msg = MIMEMultipart('alternative')
msg['Subject'] = '[GUARDiA] 메일 서버 테스트 - ' + NOW
msg['From'] = '(주)지오정보기술 GUARDiA <' + FROM + '>'
msg['To'] = TO
msg['Reply-To'] = FROM
msg['Date'] = formatdate(localtime=True)
msg['Message-ID'] = make_msgid(domain=DOMAIN)
msg['List-Unsubscribe'] = '<mailto:' + FROM + '?subject=unsubscribe>'
msg.attach(MIMEText(text, 'plain', 'utf-8'))
msg.attach(MIMEText(html, 'html', 'utf-8'))
try:
with smtplib.SMTP('localhost', 25, timeout=15) as smtp:
smtp.ehlo('mail.' + DOMAIN)
smtp.sendmail(FROM, [TO], msg.as_string())
print('OK 발송 완료 - ' + TO)
print('시각: ' + NOW + ' KST')
print('IP 링크 완전 제거 / SPF+DKIM 적용')
except Exception as ex:
print('FAIL:', ex)