zioinfo-mail/workspace/zioinfo-web/deploy/guardia_mail_v2.py
DESKTOP-TKLFCPR\ython 11c670f2a0 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

126 lines
5.1 KiB
Python

"""
GUARDiA 이메일 발송 v2 — 스팸 점수 최소화
- Reply-To 헤더 추가
- List-Unsubscribe 헤더 추가
- 적절한 Message-ID
- 텍스트 본문 충실히 작성
- HTML 과도한 스타일 제거
"""
import smtplib, socket
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'
NOW = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
DOMAIN = 'zioinfo.co.kr'
text = (
'GUARDiA ITSM 이메일 발송 테스트\n\n'
'안녕하세요,\n\n'
'(주)지오정보기술 GUARDiA ITSM 시스템에서 발송한 테스트 메일입니다.\n\n'
'[발송 정보]\n'
'- 발신자: guardia@zioinfo.co.kr\n'
'- 발신 서버: mail.zioinfo.co.kr (101.79.17.164)\n'
'- 발송 시각: ' + NOW + ' KST\n'
'- 인증: SPF PASS + DKIM 서명\n\n'
'[GUARDiA ITSM 이메일 알림 기능]\n'
'- SR(서비스 요청) 접수 및 완료 알림\n'
'- 인시던트 발생 긴급 알림\n'
'- SLA 위반 경고 알림\n'
'- 배포 완료/실패 알림\n'
'- 라이선스 만료 알림\n\n'
'이 메일은 GUARDiA ITSM 시스템 테스트 목적으로 발송되었습니다.\n\n'
'--\n'
'(주)지오정보기술\n'
'GUARDiA ITSM v2.0\n'
'guardia@zioinfo.co.kr\n'
'http://101.79.17.164:8001\n'
)
html = (
'<!DOCTYPE html>\n'
'<html lang="ko">\n'
'<head>\n'
' <meta charset="UTF-8">\n'
' <meta name="viewport" content="width=device-width, initial-scale=1.0">\n'
' <title>GUARDiA ITSM</title>\n'
'</head>\n'
'<body style="margin:0;padding:20px;font-family:Arial,sans-serif;background:#f5f5f5;color:#333">\n'
'<table width="100%" cellpadding="0" cellspacing="0" border="0">\n'
'<tr><td align="center">\n'
'<table width="560" cellpadding="0" cellspacing="0" border="0" style="background:#ffffff;border-radius:6px;overflow:hidden">\n'
'<!-- 헤더 -->\n'
'<tr><td style="background:#1a3a6b;padding:20px 30px">\n'
' <h1 style="color:#ffffff;margin:0;font-size:18px;font-weight:bold">GUARDiA ITSM</h1>\n'
' <p style="color:#aac4e8;margin:4px 0 0;font-size:12px">(주)지오정보기술 AI 인프라 자율 운영 플랫폼</p>\n'
'</td></tr>\n'
'<!-- 본문 -->\n'
'<tr><td style="padding:24px 30px">\n'
' <h2 style="color:#1a3a6b;font-size:16px;margin:0 0 12px">이메일 발송 테스트</h2>\n'
' <p style="margin:0 0 16px;line-height:1.6">안녕하세요,<br>\n'
' (주)지오정보기술 GUARDiA ITSM 시스템 테스트 메일입니다.</p>\n'
' <table width="100%" cellpadding="8" cellspacing="0" border="0" style="border-collapse:collapse;font-size:13px;margin-bottom:16px">\n'
' <tr style="background:#f8f8f8">\n'
' <td style="border:1px solid #e0e0e0;font-weight:bold;color:#555;width:32%">발신자</td>\n'
' <td style="border:1px solid #e0e0e0;color:#333">guardia@zioinfo.co.kr</td>\n'
' </tr>\n'
' <tr>\n'
' <td style="border:1px solid #e0e0e0;font-weight:bold;color:#555">발송 시각</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;font-weight:bold;color:#555">SPF 인증</td>\n'
' <td style="border:1px solid #e0e0e0;color:#2e7d32">PASS</td>\n'
' </tr>\n'
' <tr>\n'
' <td style="border:1px solid #e0e0e0;font-weight:bold;color:#555">DKIM 서명</td>\n'
' <td style="border:1px solid #e0e0e0;color:#2e7d32">서명됨</td>\n'
' </tr>\n'
' </table>\n'
' <p style="margin:0;font-size:13px;color:#666;line-height:1.6">'
'GUARDiA ITSM은 SR 접수, 인시던트 알림, SLA 경고, 배포 알림 등을 이메일로 전송합니다.</p>\n'
'</td></tr>\n'
'<!-- 푸터 -->\n'
'<tr><td style="background:#f8f8f8;padding:14px 30px;border-top:1px solid #e0e0e0;text-align:center">\n'
' <p style="margin:0;font-size:11px;color:#999">\n'
' (주)지오정보기술 | guardia@zioinfo.co.kr | http://101.79.17.164:8001\n'
' </p>\n'
'</td></tr>\n'
'</table>\n'
'</td></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['X-Mailer'] = 'GUARDiA ITSM v2.0'
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.zioinfo.co.kr')
smtp.sendmail(FROM, [TO], msg.as_string())
print('OK 발송 완료')
print('수신: ' + TO)
print('시각: ' + NOW + ' KST')
except Exception as ex:
print('FAIL:', ex)