Back to Blog

Flask-MailでHTML形式のメールを送信する方法

flask

2024年7月9日

こんにちは!

今回の記事では、Flask-MailでHTML形式のメールを送信する方法について解説します。

Flask-Mailとは、Flaskでメールを送信するためのパッケージです。Flask-Mailをインストールすることで、メールの送信機能が簡単に実装できます。

具体的なコード例を交えながら、セットアップから実際のメール送信までのステップを順を追って解説します。

Flask-Mailの準備

まずは、Flask-Mailの準備を行いましょう。

Flask-Mailのインストール

まずは、Flask-Mailをインストールします。以下のコマンドを実行しましょう。

pip install Flask-Mail

メールサーバーの設定

続いて、メールサーバーを準備します。

メールサーバーとは、メールを送信するSMTPサーバーのことです。

メールの設定は、環境変数(.envファイル)に格納します。.envファイルに以下の環境変数を設定します。

MAIL_SERVER=smtp.example.com
MAIL_PORT=587
MAIL_USE_TLS=True
MAIL_USE_SSL=False
MAIL_USERNAME=your-email@example.com
MAIL_PASSWORD=your-email-password
MAIL_DEFAULT_SENDER=your-email@example.com

SMTPサーバーやログイン情報などは自身の環境に合わせます。

次にFlaskで環境変数の読み込みをおこないます。以下のパッケージをインストールします。

pip install python-dotenv

続いて、app.pyに以下のように設定します。

from flask import Flask
from flask_mail import Mail
from dotenv import load_dotenv
import os

# .envファイルの内容を読み込みます
load_dotenv()

app = Flask(__name__)

# Flaskアプリケーションの設定を環境変数から読み込みます
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_USE_SSL'] = os.getenv('MAIL_USE_SSL') == '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)

ここまでは、Flaskでメールを使う準備です。詳しくは、以下の記事で解説しています。

【関連記事】Flaskでメールを送信する方法を解説【Flask-Mail】

HTMLメール送信の実装

続いて、HTMLメールを送信するための実装をおこないます。

まずはHTMLの準備です。

HTMLメールテンプレートの作成

HTMLメールテンプレートは、templatesディレクトリに格納しましょう。

ディレクトリ構造は以下の通りです。

flask_mail_app/
│
├── app.py
├── templates/
│   └── email_template.html
└── .env

email_template.htmlにメールの本文などを記述します。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Email</title>
</head>
<body>
    <h1>こんにちは, {{ name }}!</h1>
    <p>こちらは、Flaskから送られたメールです。</p>
</body>
</html>

app.pyの記述

最後にメール送信の実装を行います。app.pyに以下を追加します。

@app.route('/send_email')
def send_email():
    msg = Message('Hello from Flask', 
                  sender='youremail@gmail.com', 
                  recipients=['recipient@example.com'])
    
    msg.body = 'This is the plain text body of the email'
    msg.html = render_template('email_template.html', name='taro')
    
    mail.send(msg)
    return 'Email sent!'

上記のセットアップが完了したら、Flaskアプリケーションを実行し、ブラウザで/send_emailエンドポイントにアクセスすると、指定したメールアドレスにHTML形式のメールが送信されます。

メールの実装時はエラーハンドリングも付けよう

実際のアプリケーションでは、メール送信時にエラーが発生する可能性があります。

これを適切にハンドリングするために、try-exceptを使用します。

以下のように、app.pyの中身を改修します。

@app.route('/send_email')
def send_email():
    try:
        msg = Message('Hello from Flask', 
                      sender='youremail@gmail.com', 
                      recipients=['recipient@example.com'])
        
        msg.body = 'This is the plain text body of the email'
        msg.html = render_template('email_template.html', name='taro')
        
        mail.send(msg)
        return 'Email sent!'
    except Exception as e:
        return str(e)

これで、メールは送信されない場合はエラーが出力されるようになります。

まとめ

今回の記事では、Flask-Mailを使用してHTML形式のメールを送信する方法について詳しく説明しました。

Flask-Mailの基本的なセットアップから、HTMLテンプレートの作成、メール送信の実装、エラーハンドリングまで、順を追って解説しました。

メールを送信する際は、HTML形式で送信することが多いと思うので参考にしてください。

ここまでお読みいただきありがとうございました。

Webの知識を作りながら学ぶ
Flask WebAcademy

SNSアプリやチャットアプリ、さまざまなアプリを作りながら学べる実践的なカリキュラム

詳細を見る