IT

Windows 시작/재부팅 시 자동 메일링

astrocker 2020. 5. 1. 01:00
반응형

     Window 서버를 사용 중인데, 서버가 켜질 때마다 내 mail 주소로 등록된 IP를 보고해 주면 좋겠다는 생각을 하곤 했습니다. Python을 공부하다가 이 문제가 간단한 코딩으로 해결이 되어 그 결과를 여기에 기록합니다.

     대부분의 가정에서 인터넷 회선은 유동IP인데요. 원격지에서 내 PC에 연결할 일이 많다거나, 서버를 돌리는 상황에서 도움이 될 만한 Tip인 것 같아요.

 

 

     필요한 사전 준비물은 구글의 gmail 계정입니다. IMAP 설정이 되어 있어야 하고, 2단계 로그인까지 설정하여 앱 비밀번호를 발급받아야 합니다. 계정 비밀번호를 그대로 사용해도 되나, 보안상 유출 우려가 있으니 앱 비밀번호를 발급받아서 사용하는 걸 권합니다.

     준비가 완료되면 아래와 같이 Python 코드를 작성하면 됩니다.

import smtplib, socket                             # 메일발송(SMTP), 네트워크 관련 모듈
from email.mime.text import MIMEText               # 간단한 email 작성 모듈
from datetime import datetime                      # 날짜 관련 모듈

def sendMail(ip,time):                             # 메일 발송 함수 정의
    host='smtp.gmail.com'                          # SMTP 서버명
    sender='your-gmail@gmail.com'                  # 보낼 email주소
    receiver='your-mail@kakao.com'                 # 받을 email주소
    contents=str(time)+'-'+ip+'\n\n간략 본문 작성' # 메일 본문 작성
    ID=sender
    PW='앱비밀번호'
    
    msg=MIMEText(contents,_charset='euc-kr')       # 보낼 메시지 본문
    msg['Subject']='간단한 제목 작성' + ip         # 제목 (제목 + IP 주소)
    msg['From']=sender                             # 발신 주소
    msg['To']=receiver                             # 송신 주소
    
    s=smtplib.SMTP(host,587)                       # 메일 보내기 세션 생성
    s.starttls()                                   # 지메일 TLS 보안설정
    s.login(ID,PW)                                 # 지메일 로그인 인증, 앱 비밀번호 사용
    s.sendmail(sender,receiver,msg.as_string())    # 메일 보내기
    s.quit()                                       # 세션 종료

get_ip=socket.gethostbyname(socket.gethostname())  # IP주소 추출
get_time=datetime.now()                            # Window 시작 시간 추출
get_time=get_time.strftime('%Y-%m-%d %H:%M:%S')    # 시간 표시 형식 정리

sendMail(get_ip,get_time)                          # 메일 발송 함수 호출

     작성 한 코드를 파일로 저장하고 실행했을 때 송신 주소의 메일 저장함에 메일이 온다면 성공입니다. 다음으로 부팅 시 마다 메일을 보내도록 Window 작업 스케줄러에 등록하면 됩니다.

     작업 스케줄러 등록과 구글 앱 비밀번호 생성하는 방법은 추후 update하겠습니다.

728x90
반응형