linux 서버에서 메일보내기 (python 이용)

반응형

 

 

 

 

1. 필요한 이유

서버 작업량이 많아지고, 오래 걸리는 작업을 동시에 여러개 진행하다 보면, 어떤 일이 언제 끝났는지, 결과가 어떤지 에러가 나지 않았는지 파악하는게 쉽지 않습니다. 메일을 통해 이 문제를 해결할 수 있습니다.

 

작업을 메일 제목으로, 결과 파일과 에러파일을 첨부파일로, 보고자하는 부분을 메일의 본문으로 하여, 작업이 종료되면 메일이 발신되도록 하면 위와 같은 문제에서 벗어날 수 있습니다.

 

리눅스 자체에도 메일 툴과 서버가 있지만, 확장성을 위해 파이썬 코드를 직접 짜서 사용합니다.

 

2. 과정

네이버에서 SMTP 사용설정 -> python 코드 다운로드 -> 다운받은 python 코드 맨 윗줄에 python3.6 경로 설정

1) 네이버에서 SMTP 서버 사용

 

 

네이버에서 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는 해당 옵션 값의 필요조건을 의미합니다.

*파이썬 코드를 첨부합니다. 수정, 배포, 이용 자유롭게 하셔도 좋습니다.

 

 

mail.py
0.00MB

 

 

관련 깃허브: https://github.com/netsus/python_tools/blob/master/mail.py

 

이번엔 python code를 이용해, 리눅스에서 메일을 보내는 방법을 알아보았습니다.

다음에 더 좋은 글로 찾아오겠습니다.


읽어주셔서 감사합니다.

 

 

반응형

댓글

Designed by JB FACTORY