Flask-Mail을 사용하여 이메일 전송하기
개요
Flask는 Python으로 작성된 경량 웹 프레임워크로, 기본 기능은 가볍지만 다양한 확장 기능을 통해 강력한 애플리케이션을 구축할 수 있습니다. 이번 포스팅에서는 Flask의 확장 기능 중 하나인 Flask-Mail을 활용하여 이메일을 전송하는 방법을 알아보겠습니다. Flask-Mail은 SMTP 프로토콜을 사용하여 간단히 이메일을 보낼 수 있도록 도와주는 라이브러리입니다.
Flask-Mail 설치 및 설정
1. Flask-Mail 설치
Flask-Mail을 사용하려면 먼저 라이브러리를 설치해야 합니다. 다음 명령어를 실행하여 설치할 수 있습니다:
pip install Flask-Mail
2. Flask-Mail 설정
Flask 애플리케이션에서 Flask-Mail을 사용하려면 메일 서버의 설정 정보가 필요합니다. 보통 Gmail, Yahoo, 또는 회사 이메일 서버 정보를 사용합니다.
다음은 Flask 애플리케이션 설정 예제입니다:
from flask import Flask
from flask_mail import Mail, Message
app = Flask(__name__)
# Flask-Mail 설정
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USE_SSL'] = False
app.config['MAIL_USERNAME'] = 'your_email@gmail.com'
app.config['MAIL_PASSWORD'] = 'your_password'
app.config['MAIL_DEFAULT_SENDER'] = 'your_email@gmail.com'
mail = Mail(app)
Flask-Mail을 사용한 이메일 전송
1. 간단한 이메일 전송 예제
다음은 Flask-Mail로 이메일을 전송하는 기본 예제입니다:
@app.route('/send_email')
def send_email():
try:
msg = Message(
"Hello from Flask!",
recipients=["recipient_email@gmail.com"]
)
msg.body = "This is a test email sent from a Flask application!"
mail.send(msg)
return "Email sent successfully!"
except Exception as e:
return f"An error occurred: {e}"
if __name__ == '__main__':
app.run(debug=True)
위 코드를 실행하고 /send_email
경로로 접근하면 지정된 이메일 주소로 메일이 전송됩니다.
2. HTML 내용이 포함된 이메일 전송
플레인 텍스트뿐만 아니라 HTML 형식의 이메일도 보낼 수 있습니다. 아래는 HTML 이메일 전송 예제입니다:
@app.route('/send_html_email')
def send_html_email():
try:
msg = Message(
"HTML Email Example",
recipients=["recipient_email@gmail.com"]
)
msg.html = """
<h1>Hello from Flask!</h1>
<p>This is a <b>test email</b> with HTML content.</p>
"""
mail.send(msg)
return "HTML Email sent successfully!"
except Exception as e:
return f"An error occurred: {e}"
if __name__ == '__main__':
app.run(debug=True)
Flask-Mail 사용 시 주의사항
보안 문제:
- Gmail과 같은 서비스에서는 보안 강화를 위해 앱 비밀번호를 생성해야 할 수 있습니다. Google 계정 보안 설정에서 "2단계 인증"을 활성화하고, 앱 비밀번호를 생성하세요.
SMTP 제한:
- 무료 이메일 서비스는 하루에 전송할 수 있는 이메일 수에 제한을 둘 수 있습니다. 대량 이메일 전송이 필요한 경우 Mailgun, SendGrid와 같은 전문 이메일 서비스와 연동하는 것이 좋습니다.
비밀번호 관리:
- 이메일 비밀번호를 소스 코드에 직접 입력하지 마세요.
.env
파일을 사용하거나 환경 변수를 통해 관리하는 것이 좋습니다.
- 이메일 비밀번호를 소스 코드에 직접 입력하지 마세요.
실제 애플리케이션에 적용하기
1. 환경 변수 사용
.env
파일을 만들어 민감한 정보를 관리할 수 있습니다. Python의 python-dotenv
라이브러리를 활용하면 편리합니다.
설치:
pip install python-dotenv
.env
파일:
MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USE_TLS=True
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=your_password
MAIL_DEFAULT_SENDER=your_email@gmail.com
애플리케이션 코드:
from flask import Flask
from flask_mail import Mail, Message
from dotenv import load_dotenv
import os
load_dotenv()
app = Flask(__name__)
app.config['MAIL_SERVER'] = os.getenv('MAIL_SERVER')
app.config['MAIL_PORT'] = os.getenv('MAIL_PORT')
app.config['MAIL_USE_TLS'] = os.getenv('MAIL_USE_TLS') == 'True'
app.config['MAIL_USERNAME'] = os.getenv('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.getenv('MAIL_PASSWORD')
app.config['MAIL_DEFAULT_SENDER'] = os.getenv('MAIL_DEFAULT_SENDER')
mail = Mail(app)
@app.route('/send_email')
def send_email():
msg = Message(
"Test Email",
recipients=["recipient_email@gmail.com"]
)
msg.body = "Email sent using Flask-Mail with environment variables!"
mail.send(msg)
return "Email sent successfully!"
if __name__ == '__main__':
app.run(debug=True)
2. 대량 이메일 전송
다수의 수신자에게 이메일을 보내려면 recipients
에 이메일 주소 목록을 전달하면 됩니다:
@app.route('/send_bulk_email')
def send_bulk_email():
recipients = ["email1@example.com", "email2@example.com", "email3@example.com"]
try:
msg = Message(
"Bulk Email Example",
recipients=recipients
)
msg.body = "This is a bulk email sent to multiple recipients."
mail.send(msg)
return "Bulk emails sent successfully!"
except Exception as e:
return f"An error occurred: {e}"
결론
Flask-Mail은 Flask 애플리케이션에서 이메일 전송을 간단하고 효율적으로 구현할 수 있도록 도와줍니다. 이번 포스팅에서는 기본 설정부터 HTML 이메일, 대량 이메일 전송, 환경 변수 사용까지 다양한 내용을 다뤘습니다. 이를 활용하여 이메일 알림 기능이 포함된 Flask 애플리케이션을 손쉽게 구축해 보세요!
'Python > Python Flask' 카테고리의 다른 글
Flask-Caching으로 애플리케이션 성능 최적화하기 (0) | 2025.09.17 |
---|---|
Flask-Admin으로 관리 페이지 만들기 (0) | 2025.09.15 |
Flask를 활용한 OAuth와 소셜 로그인 통합 방법 (0) | 2025.09.14 |
Flask에서 사용자 인증: 세션 관리 및 쿠키 사용 (0) | 2025.09.11 |
Flask 사용자 인증: Flask-Login으로 사용자 인증 구현하기 (0) | 2025.09.10 |