Python Flask

Flask Mail을 사용하여 이메일 전송하기

PyExplorer 2025. 2. 6. 10:43
728x90

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 사용 시 주의사항

  1. 보안 문제:
    • Gmail과 같은 서비스에서는 보안 강화를 위해 앱 비밀번호를 생성해야 할 수 있습니다. Google 계정 보안 설정에서 "2단계 인증"을 활성화하고, 앱 비밀번호를 생성하세요.
  2. SMTP 제한:
    • 무료 이메일 서비스는 하루에 전송할 수 있는 이메일 수에 제한을 둘 수 있습니다. 대량 이메일 전송이 필요한 경우 Mailgun, SendGrid와 같은 전문 이메일 서비스와 연동하는 것이 좋습니다.
  3. 비밀번호 관리:
    • 이메일 비밀번호를 소스 코드에 직접 입력하지 마세요. .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 애플리케이션을 손쉽게 구축해 보세요!

728x90