Flaskでメールを送信する方法を解説【Flask-Mail】
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開発の助けになれば幸いです。
ここまでお読みいただきありがとうございました。
Pythonの基礎から応用まで学べる
Python WebAcademy
Python WebAcademyでは、Pythonの基礎からアーキテクチャなどの応用的な内容まで幅広く学べます。また、ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。

インフラの学習はInfraAcademy

おすすめの記事









