- 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>
108 lines
4.1 KiB
Python
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'
|
|
' (주)지오정보기술 | 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)
|