#!/usr/bin/env python3 """GUARDiA 이메일 발송 스크립트 — 서버에서 직접 실행""" import paramiko, time, sys HOST = '101.79.17.164'; USER = 'root'; PASS = '1q2w3e!Q' client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(HOST, username=USER, password=PASS, timeout=15) sftp = client.open_sftp() # 서버에서 실행할 Python 스크립트를 파일로 저장 mail_script = r""" import smtplib 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' NOW = datetime.now().strftime('%Y-%m-%d %H:%M:%S') text_body = """안녕하세요, GUARDiA ITSM 이메일 발송 테스트입니다. 발신 서버: mail.zioinfo.co.kr (101.79.17.164) 발신자: guardia@zioinfo.co.kr 발송 시각: """ + NOW + """ KST 인증: SPF PASS + DKIM 서명 이 메일이 수신되면 GUARDiA SMTP 서버가 정상 작동하는 것입니다. (주)지오정보기술 | GUARDiA ITSM v2.0 http://101.79.17.164:8001 """ html_body = """
🛡

GUARDiA ITSM

(주)지오정보기술 AI 인프라 자율 운영 플랫폼

📧 이메일 발송 테스트

zio 서버 SMTP 서버 정상 동작 확인

✅ 발송 성공

SPF · DKIM 인증을 통과하여 정상 발송되었습니다.

발신 서버 mail.zioinfo.co.kr (101.79.17.164)
발신자 guardia@zioinfo.co.kr
발송 시각 """ + NOW + """ KST
SPF 인증 ✅ PASS
DKIM 서명 ✅ 서명됨

🤖 GUARDiA ITSM 이메일 알림 기능

  • SR 접수/완료 알림
  • 인시던트 긴급 알림
  • SLA 위반 경고
  • 배포 완료/실패 알림
  • 라이선스 만료 알림
GUARDiA ITSM v2.0 자동 발송 | (주)지오정보기술
guardia@zioinfo.co.kr | http://101.79.17.164:8001
""" msg = MIMEMultipart('alternative') msg['Subject'] = '[GUARDiA] SMTP 이메일 발송 테스트 - ' + NOW msg['From'] = 'GUARDiA ITSM <' + FROM + '>' msg['To'] = TO msg['X-Mailer'] = 'GUARDiA ITSM v2.0' msg.attach(MIMEText(text_body, 'plain', 'utf-8')) msg.attach(MIMEText(html_body, 'html', 'utf-8')) try: with smtplib.SMTP('localhost', 25, timeout=15) as smtp: smtp.ehlo('mail.zioinfo.co.kr') refused = smtp.sendmail(FROM, [TO], msg.as_string()) if refused: print('FAIL 거부:', refused) else: print('OK 발송 완료! ythong86@gmail.com 수신함을 확인하세요.') print('발신: ' + FROM) print('발송 시각: ' + NOW) except Exception as ex: print('FAIL:', ex) """ with sftp.open('/tmp/guardia_mail.py', 'w') as f: f.write(mail_script) sftp.close() chan = client.get_transport().open_session() chan.set_combine_stderr(True) chan.exec_command('python3 /tmp/guardia_mail.py 2>&1') start = time.time() while not chan.exit_status_ready(): if chan.recv_ready(): sys.stdout.buffer.write(chan.recv(4096)); sys.stdout.flush() if time.time() - start > 20: break time.sleep(0.3) while chan.recv_ready(): sys.stdout.buffer.write(chan.recv(4096)) sys.stdout.flush() chan.recv_exit_status() client.close()