- 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>
126 lines
5.1 KiB
Python
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)
|