#!/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 = """
""" 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()