Back to Blog

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

flask

2024年7月9日

こんにちは!

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

FlaskはPythonで作られた軽量なWebフレームワークです。軽量でシンプルな反面、メール送信の機能などは実装する必要があります。

メール送信は、ユーザー登録時などさまざまな場面で使われます。

今回は、Flaskを使ってメールを送信する方法について解説します。

Flask-Mailの設定

Flaskでメールを送信する方法はいくつかありますが、一般的に使用される方法の一つは、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で環境変数を使う方法を詳しく解説!

メール送信の実装

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

from flask_mail import Message

@app.route('/send_mail')
def send_mail():
    msg = Message(
        'Hello from Flask',
        recipients=['recipient@example.com']
    )
    msg.body = 'This is a test email sent from a Flask application!'
    mail.send(msg)
    return 'Mail sent!'

これは、/send_mailにアクセスしたらメールを送るように実装しています。

Messageインスタンスの説明

メールを送信するためには、flask_mailのMessageインスタンスをオブジェクト化します。

このオブジェクトには、メールの送信先、件名、本文など、メールに関するすべての情報が含まれます。

subject (件名)

メールの件名を指定します。

from flask_mail import Message

@app.route('/send_mail')
def send_mail():
    msg = Message()
    msg.subject = 'Hello from Flask'

recipients (受信者リスト)

メールを送信する受信者のリストを指定します。リスト形式で複数の受信者を指定できます。

msg.recipients = ['recipient1@example.com', 'recipient2@example.com']

body (本文)

プレーンテキスト形式のメール本文を指定します。

msg.body = 'This is a test email sent from a Flask application!'

html (HTML本文)

HTML形式のメール本文を指定します。

HTML本文を使って、リッチテキスト形式のメールを送信することができます。

msg.html = '<p>This is a <strong>test</strong> email sent from a Flask application!</p>'

HTMLを使ったメールの送信については、こちらの記事で詳しく解説しています。

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

sender (送信者)

メールの送信者を指定します。

これはオプションで、デフォルトではMAIL_DEFAULT_SENDERの設定が使用されます。

msg.sender = 'your-email@example.com'

cc (CCリスト)

メールのCC受信者を指定します。リスト形式で複数の受信者を指定できます。

msg.cc = ['cc1@example.com', 'cc2@example.com']

bcc (BCCリスト)

メールのBCC受信者を指定します。リスト形式で複数の受信者を指定できます。

msg.bcc = ['bcc1@example.com', 'bcc2@example.com']

attachments (添付ファイル)

メールに添付ファイルを追加します。

添付ファイルを追加するには、add_attachmentメソッドを使用します。

with app.open_resource('path/to/file') as fp:
    msg.attach('file.txt', 'text/plain', fp.read())

このように設定することで、Flaskでメールを送信することができます。

まとめ

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

Flaskでメールを送信する際は、Flask-mailを使用します。

メールの送信機能はWebアプリケーションの中で、重要な機能の1つです。ぜひ覚えておきましょう。

この記事があなたのWeb開発の助けになれば幸いです。

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

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

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

詳細を見る