본문 바로가기

파이썬을 활용한 CentOS 7 에서 Mysql DB 조회한 값을 사용자에게 HTML 메일 보내기 - 2

액트 2020. 1. 23.
반응형

[python] 파이썬을 활용한 CentOS 7 에서 Mysql DB 조회한 값을 사용자에게 메일 보내기 - 2


이 글에 소개된 기능은 CentOS 7 에서 Mysql DB 데이터를 select 하여 해당 결과 값이 어떤 조건을 만족하면 관리자에게 메일 보내는 기능입니다.

 

배경

특정 프로그램을 전사 PC에 설치하여 운영 중입니다.

필수로 설치되어 있어야 할 해당 프로그램을 임의로 PC를 포맷한다던가 하는 행위를 하면 서버와 인증이 되지 않습니다.

인증이 한달 이상된 사용자에게 자동으로 매일을 발송하는 기능입니다.

매일 아침마다 또는 가끔씩 서버 관리 페이지에서 확인하는 절차가 번거로워 해당 기능을 만들게 되었다. 


개발 환경

  • centos 버전: CentOS Linux release 7.6.1810 (Core)
  • Mysql 버전: mysql  Ver 14.14 Distrib 5.6.42, for Linux (x86_64) using  EditLine wrapper
  • Python 버전: Python 2.7.5
  • CentOS 7 를 설치하면 최소버전 포함하여 기본적으로 Python 2.7.5 가 설치되어 있습니다.
  • 메일은 사내 메일서버로 SMTP 인증하여 보낸다. (사내 메일서버가 없으면 구글이나 네이버를 이용합니다.)

설정 과정

 

1. CentOS 에서 파이썬과 MySQL 연동을 위한 라이브러리 설치

# yum -y install gcc mysql-devel python-devel

 

2. 파이썬 라이브러리 설치

  • pip는 파이썬으로 작성된 패키지 소프트웨어를 설치 및 관리하는 패키지 관리 시스템이다.
  • 파이썬 2.7.9 이후 버전과 파이썬 3.4 이후 버전은 pip를 기본적으로 포함한다.
  • 파이썬 라이브러리 설치를 위한 명령어인 pip를 사용하려면 CentOS에 먼저 설치해줘야 한다.
# yum -y install python-pip

2.1 MySQL 연동을 위한 파이썬 라이브러리 설치

# pip install MySQL-python 

2.2 MySQL 연동이 잘 되는지 테스트해본다.

 

# python -c "import MySQLdb" 
  • 아무런 메시지가 없는 것이 정상이다.

 

3. MySQL DB에서 select 하여 결과 값을 메일 보내기 기능 구현

# vi TEST.py
#!/usr/bin/python
#-*- coding:utf-8 -*-

import smtplib
import MySQLdb

# MySQL Connection 연결
conn = MySQLdb.connect(host='서버IP', user='계정', passwd='패스워드',
                      db='연결할 DB', use_unicode=True, charset='utf8')


# Connection 으로부터 Cursor 생성
curs = conn.cursor()

# SQL문 실행
sql= "select 문"
curs.execute(sql)

# 데이타 Fetch
rows = curs.fetchall()
TupleToString = str(rows[0])


# 데이터 존재 여부 확인
if TupleToString == '(0L,)':
        # 데이타 없으면 DB Connection 닫기
        conn.close()
else:
        # 데이타 있으면 select 후 Mail
        sql = "select 문"
        
        curs.execute(sql)
        rows = curs.fetchone()

        from email.mime.text import MIMEText
        from email.mime.multipart import MIMEMultipart

        s = smtplib.SMTP("SMTP 주소", 포트번호)
        s.login("SMTP 인증메일주소", "패스워드")
        fromEmail = "발신자 메일주소"

        while rows:
                toEmail = "수신자 메일주소"
                contents = "<ins>※ 이 메일은 시스템에서 발송하는 메일 입니다.</ins><br><br>"
                contents += "테스트 메일입니다.<br>"
                contents += "설치는 아래 링크로 접속하셔서 설치하시면 됩니다.<br>"
                contents += "<a href='http://www.naver.com'>&emsp;설치링크</a><br>"
                contents += "이상입니다. 감사합니다."
                message = MIMEMultipart('alternative')
                #message = MIMEText(contents, _charset='utf-8')
                message = MIMEText(contents, 'html', _charset='utf-8')
                message["Subject"] = "제목"
                message["To"] = toEmail
                message["From"] = fromEmail
                s.sendmail(fromEmail, toEmail, message.as_string())
                rows = curs.fetchone()
        s.quit()
        # DB Connection 닫기
        conn.close()

 

4. Crontab 등록

  • 해당 파일이 스케쥴에 의해 동작할 수 있도록 crontab 에 등록해준다.
# crontab -e
  • 평일 오전 9시에 메일 발송
0 9 * * 1-5 python TEST.py

 

반응형

'IT > 소프트웨어' 카테고리의 다른 글

HTML과 CSS  (0) 2020.01.30
HTML 입력 양식  (0) 2020.01.23
HTML 공간 분할  (0) 2020.01.17
HTML 기본 요소 - Style, Color, Background, Link, state, img, list, table  (0) 2020.01.17
HTML 텍스트 요소  (0) 2020.01.15

댓글