CENTOS 7 에서 MySQL Select 하여 결과 값을 SMTP 메일 보내기
본문 바로가기

CENTOS 7 에서 MySQL Select 하여 결과 값을 SMTP 메일 보내기

액트 2020. 1. 3.

[python] CENTOS 7 에서 MySQL Select 하여 결과 값을 SMTP메일 보내기


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

 

배경

특정 앱을 전사에 설치하여 운영 중이다. 

이 앱을 안드로이드는 사용자가 삭제할 수 없지만, iOS는 삭제가 가능하다.

앱을 삭제한 사용자를 조회하여 삭제한 인원이 있으면 메일로 삭제한 인원의 정보를 받는 기능이다.

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


파이썬을 처음 해보았다.. 수정할 부분이 있으면 댓글로 일침 부탁드립니다.

개발 환경

  • 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 delete_app_mail.py
#!/usr/bin/python
#-*- coding: utf-8 -*-		

##################################################################################
#######                           DB연결하기                               #######
##################################################################################

import smtplib
import MySQLdb

# MySQL Connection 연결
conn = MySQLdb.connect(host='DB IP 주소 입력', user='계정입력', passwd='패스워드입력',
                      db='DB명 입력', use_unicode=True, charset='utf8mb4')


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

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

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


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

        rows = curs.fetchone()
        all_deleted_name = ""
        while rows:
                deleted_name ="".join(rows[0])
                all_deleted_name = all_deleted_name + " " +  deleted_name
                rows = curs.fetchone()
##################################################################################
#######                           메일 보내기                              #######
##################################################################################
        from email.mime.text import MIMEText
        fromEmail = "발신인 메일주소"
        toEmail = "수신인 메일주소"
        contents = "deleted name: " + all_deleted_name  #삭제인원 이름
        message = MIMEText(contents, _charset='utf-8')
        message["Subject"] = "[App] Deleted (" + all_deleted_name + ")"
        message["From"] = fromEmail
        message["To"] = toEmail
        s = smtplib.SMTP("SMTP 인증할 메일주소", 해당포트)
        s.login("메일계정", "계정패스워드")
        s.sendmail(fromEmail, toEmail, message.as_string())
        s.quit()
        # DB Connection 닫기
        conn.close()

 

4. Crontab 등록

  • 해당 파일이 스케쥴에 의해 동작할 수 있도록 crontab 에 등록해준다.
# crontab -e
  • 5분마다 실행
*/5 * * * * 파일경로

 

댓글