[python] Flask-RESTful에서 SMTP 서버와 연동하여 이메일 발송하기

Flask-RESTful은 Flask 프레임워크의 확장 모듈 중 하나로, RESTful 웹 서비스를 쉽게 구축할 수 있도록 도와줍니다. 이번 포스트에서는 Flask-RESTful을 사용하여 SMTP(Simple Mail Transfer Protocol) 서버와 연동하여 이메일을 발송하는 방법에 대해 알아보겠습니다.

SMTP 서버 설정하기

SMTP 서버를 사용하기 위해서는 먼저 SMTP 서버의 설정이 필요합니다. 대표적인 SMTP 서버로는 Gmail의 SMTP 서버가 있습니다. Gmail SMTP 서버를 사용하기 위해서는 Gmail 계정의 보안 설정에서 “액세스 허용 설정”을 해줘야 합니다.

Flask-RESTful 설치하기

먼저 Flask-RESTful을 설치해야 합니다. 아래의 명령어를 사용하여 Flask-RESTful을 설치할 수 있습니다.

pip install flask-restful

필요한 라이브러리 임포트하기

SMTP 서버와 연동하기 위해 Python 내장 라이브러리인 smtplib와 email을 사용할 것입니다. 다음과 같이 필요한 라이브러리를 임포트합니다.

import smtplib
from email.mime.text import MIMEText

SMTP 서버와 연결하기

SMTP 서버와 연결하기 위해 다음과 같은 정보를 설정해야 합니다:

smtp_host = 'smtp.gmail.com'
smtp_port = 587
smtp_secure = True

smtp_username = 'your_email@gmail.com'
smtp_password = 'your_password'

smtp_conn = smtplib.SMTP(smtp_host, smtp_port)
if smtp_secure:
    smtp_conn.starttls()
smtp_conn.login(smtp_username, smtp_password)

이메일 발송하기

이제 SMTP 서버와 연결되었으므로, 실제로 이메일을 발송해보겠습니다. Flask-RESTful을 사용하여 POST 메서드로 이메일 발송 요청을 받을 수 있도록 API 엔드포인트를 구현합니다. 이메일 발송에 필요한 정보를 JSON 형식으로 받아옵니다.

from flask import Flask, request
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class SendEmail(Resource):
    def post(self):
        data = request.get_json()

        receiver = data.get('receiver')
        subject = data.get('subject')
        content = data.get('content')

        msg = MIMEText(content)
        msg['Subject'] = subject
        msg['From'] = smtp_username
        msg['To'] = receiver

        smtp_conn.sendmail(smtp_username, receiver, msg.as_string())

        return {'message': 'Email sent successfully'}

api.add_resource(SendEmail, '/send_email')

if __name__ == '__main__':
    app.run(debug=True)

위의 코드에서는 /send_email 엔드포인트로 POST 메서드를 정의하고, JSON 형식으로 받아온 수신자, 제목, 내용을 이용하여 이메일을 발송합니다. 발송이 완료되면 성공 메시지를 반환합니다.

요약

이번 포스트에서는 Flask-RESTful을 사용하여 SMTP 서버와 연동하여 이메일을 발송하는 방법을 알아보았습니다. SMTP 서버 설정, 필요한 라이브러리 임포트, SMTP 서버와 연결, 이메일 발송하는 과정을 순서대로 설명하였습니다. Flask-RESTful을 활용하여 이메일 발송 기능을 구현할 수 있습니다.

참고 자료: