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 Flask' 카테고리의 다른 글
Flask 배포 가이드[ 개발 환경과 배포 환경 설정 ] (0) | 2025.02.08 |
---|---|
Flask Caching으로 애플리케이션 성능 최적화하기 (0) | 2025.02.07 |
Flask Admin으로 관리 페이지 만들기 (0) | 2025.02.05 |
Flask를 활용한 OAuth와 소셜 로그인 통합 방법 (0) | 2025.02.04 |
Flask에서 사용자 인증 세션 관리 및 쿠키 사용 (0) | 2025.02.03 |