linux 서버에서 메일보내기 (python 이용)
- Programming/Python 꿀팁
- 2020. 6. 30.
1. 필요한 이유
서버 작업량이 많아지고, 오래 걸리는 작업을 동시에 여러개 진행하다 보면, 어떤 일이 언제 끝났는지, 결과가 어떤지 에러가 나지 않았는지 파악하는게 쉽지 않습니다. 메일을 통해 이 문제를 해결할 수 있습니다.
작업을 메일 제목으로, 결과 파일과 에러파일을 첨부파일로, 보고자하는 부분을 메일의 본문으로 하여, 작업이 종료되면 메일이 발신되도록 하면 위와 같은 문제에서 벗어날 수 있습니다.
리눅스 자체에도 메일 툴과 서버가 있지만, 확장성을 위해 파이썬 코드를 직접 짜서 사용합니다.
2. 과정
네이버에서 SMTP 사용설정 -> python 코드 다운로드 -> 다운받은 python 코드 맨 윗줄에 python3.6 경로 설정
1) 네이버에서 SMTP 서버 사용
2) python 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #!/home/cwjcsk/miniconda2/envs/py3/bin/python3.6 #-*- coding: utf-8 -*- import smtplib from email.mime.text import MIMEText from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart from os.path import basename import warnings warnings.filterwarnings("ignore") import argparse parser = argparse.ArgumentParser(description="Send E-amil") parser.add_argument('-s','--subject',dest='subject', nargs='+', help='Mail Title.',required=True) parser.add_argument('-c','--content',dest='content', nargs='+', help='Mail Contents.',required=True) parser.add_argument('-i','--input_files',dest='files', nargs='+', help='input files to mail. if many files five space.',required=False) args=parser.parse_args() subject=args.subject content=args.content files=args.files # 메세지 구성 msg = MIMEMultipart() msg['Subject'] = (' ').join(subject) msg['From'] = '[내 이메일 입력하는 곳]' msg['To'] = '[받는 메일 입력하는 곳]' # msg['Cc'] = '[참조 메일 입력하는 곳]' # 파일 첨부 for f in files or []: with open(f, "rb") as fil: part = MIMEApplication( fil.read(), Name=basename(f) ) # After the file is closed part['Content-Disposition'] = f'attachment; filename="{basename(f)}"' msg.attach(part) # 메일 본문 첨부 if content: msgText = MIMEText((' ').join(content), 'html') msg.attach(msgText) #메일 발송 with smtplib.SMTP_SSL('smtp.naver.com') as smtp: smtp.login('[내 이메일 입력하는 곳]','[비밀번호 입력하는 곳]') | cs |
코드의 맨 윗줄에 python의 경로를 작성함으로써, 명령어로 python mail.py 를 이용하지않고, mail.py만 사용할 수 있도록 하였습니다. (코드의 맨 윗줄을 지우고, python mail.py 형식으로 사용하셔도 됩니다.)
* 코드에서 [입력하는 곳]을 알맞게 채우시면 됩니다.
3) 서버에서 경로 설정
홈 디렉토리에서 .bashrc파일(환경설정 파일)에 mail.py가 있는 경로를 export PATH=[mail.py가 있는 경로]:$PATH 와 같이 작성합니다. 이렇게하면, 어디서든 mail.py를 바로 실행할 수 있습니다.
ex) export PATH=~/00_tools/00_cwj_python/:$PATH
3. 사용 예시
※ -i Compare_* : Compare_로 시작하는 모든 파일을 첨부하겠다는 의미입니다.
*옵션 설명
-s : 메일의 제목이 들어갑니다. 따옴표를 해도되고, 안해도 되지만 명확하게 하기위해 따옴표를 지정해주는게 좋습니다. (required True)
-c : 메일의 본문이 들어갑니다. 마찬가지로 따옴표를 하는게 선호됩니다. (required False)
-i : 첨부파일을 넣을 수 있습니다. 위의 예시처럼 정규표현식을 사용하여 여러개의 파일을 보낼 수도 있습니다. (required False)
*required True, False는 해당 옵션 값의 필요조건을 의미합니다.
*파이썬 코드를 첨부합니다. 수정, 배포, 이용 자유롭게 하셔도 좋습니다.
관련 깃허브: https://github.com/netsus/python_tools/blob/master/mail.py
이번엔 python code를 이용해, 리눅스에서 메일을 보내는 방법을 알아보았습니다.
다음에 더 좋은 글로 찾아오겠습니다.
읽어주셔서 감사합니다.
'Programming > Python 꿀팁' 카테고리의 다른 글
[Python] Redmine API 사용법 (0) | 2020.09.04 |
---|---|
[Python] dictionary max value에 대한 key 찾기 (0) | 2020.09.02 |
[Python] VCF 파일을 데이터프레임(DataFrame)으로 (0) | 2020.09.01 |
[Python] 이미지에 글자넣고 사이즈 조절하기(PIL library) (0) | 2020.08.28 |
[Python의 꽃] 리스트 컴프리헨션(List Comprehension) (1) | 2020.08.20 |