Flaskで多言語対応したメールを送信する設定手順!Python初心者でもできる自動翻訳メール
生徒
「PythonのFlaskを使って、お問い合わせのお礼メールを自動で送りたいんです。でも、海外のお客さんには英語で、日本のお客さんには日本語で送ることはできますか?」
先生
「はい、できますよ!Flask-Babelという翻訳の道具と、Flask-Mailというメール送信の道具を組み合わせれば、相手の言語に合わせたメールを自動で送ることが可能です。」
生徒
「設定が難しそうですが、パソコン初心者でも大丈夫でしょうか?」
先生
「一つずつ順番に進めれば大丈夫です。まずは必要な道具の準備から始めていきましょう!」
1. Flaskで多言語メールを送るための仕組みを知ろう
Webサイトでお問い合わせをした後に届く「サンクスメール」。これを相手の言葉に合わせて変えるには、プログラムが「この人は日本語を使っているな」「この人は英語だな」と判断する必要があります。
Python(パイソン)というプログラミング言語の「Flask(フラスク)」という枠組みでは、翻訳を担当する「Flask-Babel(フラスク・バベル)」と、メールの配送を担当する「Flask-Mail(フラスク・メール)」という二つの補助ツールを合体させて使います。イメージとしては、翻訳家が手紙を書き、郵便屋さんがそれを届けるような分担作業です。
この仕組みを作っておけば、自分で何通もメールを書き分ける必要はありません。あらかじめ「テンプレート」というメールの雛形を作っておき、言葉の部分だけを自動で差し替えることができるのです。これを「国際化」や「多言語対応」と呼びます。世界中の人に自分のサービスを使ってもらうための大切な第一歩ですね。
2. 必要な道具をインストールしよう
まずは、自分のパソコンにメール送信と翻訳のためのプログラムを取り込む作業、つまり「インストール」を行いましょう。パソコンにある黒い画面(ターミナルやコマンドプロンプト)に、以下の命令を一行ずつ入力して実行します。これは、スマートフォンのアプリストアからアプリをダウンロードするのと同じような操作です。
pip install Flask-Mail
pip install Flask-Babel
「pip(ピップ)」というのは、Pythonで新しい機能を追加するときに使う魔法の言葉です。これが終われば、あなたのパソコンで多言語メールを送るための準備が整います。インストールが成功すると、画面に「Successfully installed」という文字が表示されます。これが確認できれば、次へ進みましょう。
3. メールの配送設定をプログラムに書こう
郵便局に荷物を持っていくとき、どこの郵便局を使うか決めるように、プログラムにも「どのメールサーバーを使って送るか」を教える必要があります。これを「設定(コンフィグ)」と呼びます。今回は、Gmailなどを例にした一般的な設定方法を見てみましょう。
from flask import Flask
from flask_mail import Mail
app = Flask(__name__)
# メールのサーバー設定(郵便屋さんの住所のようなもの)
app.config['MAIL_SERVER'] = 'smtp.example.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'your-email@example.com'
app.config['MAIL_PASSWORD'] = 'your-password'
# メール機能をアプリに登録
mail = Mail(app)
この設定を書くことで、プログラムが自動的に指定したメールアカウントを使ってメールを送信できるようになります。パスワードなどはとても大切な情報なので、人に見られないように注意してくださいね。また、ポート(PORT)という単語は、インターネット上の「窓口番号」のようなものだと考えてください。
4. 翻訳のスイッチを作る「Babel」の設定
次に、翻訳の担当である「Flask-Babel」の設定を行います。ここで重要なのは、「今、どの言語を使うべきか」を決定する関数(命令のまとまり)を作ることです。これを設定しないと、プログラムは日本語で返すべきか英語で返すべきか迷ってしまいます。
from flask_babel import Babel, _
# 翻訳機能をアプリに登録
babel = Babel(app)
# どの言語を使うか決めるルールを作る
@babel.localeselector
def get_locale():
# ユーザーのブラウザ設定などから最適な言語を選びます
# ここでは例として、常に「日本語」か「英語」を自動選択するようにします
return 'ja' # 日本語にする場合は 'ja'、英語にする場合は 'en'
ここで出てくる @babel.localeselector というのは、「これから言語を選ぶルールを説明しますよ」という合図です。パソコンが自動的に、見ている人の国に合わせて「ja(日本語)」や「en(英語)」を選んでくれるようになります。これで、翻訳の準備もばっちりです。
5. メールの内容を翻訳できるように準備しよう
メールの件名や本文の中に、翻訳したい言葉があるときは _() という記号を使います。これは「アンダースコア」と呼びます。この記号で囲まれた言葉が、後で別の言語に置き換わる対象になります。
例えば、「ありがとうございます」という言葉を翻訳したいなら、以下のように書きます。
from flask_mail import Message
def send_thanks_email(user_email):
# 件名を翻訳の対象にします
subject = _('お問い合わせありがとうございます')
# メールの作成
msg = Message(subject,
sender='info@example.com',
recipients=[user_email])
# 本文も翻訳できるように設定
msg.body = _('内容を確認次第、担当者よりご連絡いたします。')
# メールを送信!
mail.send(msg)
こうしておけば、後で作成する「翻訳辞書ファイル」の中身を変えるだけで、プログラム自体を書き換えなくても、自動的に「Thank you for your inquiry」といった英語に切り替わります。一つのプログラムで複数の言語に対応できる、とても便利な書き方です。未経験の方も、まずはこの「カッコとアンダースコアで囲む」という形を覚えてくださいね。
6. 翻訳辞書ファイルを作成する手順
プログラムを書いただけでは、まだ翻訳はされません。次に「辞書」を作る作業が必要です。これは、プログラムの中の日本語に対して「英語ならこう言うよ」という対応表を作る作業です。手順は大きく分けて3つです。
一つ目は「言葉の拾い出し」です。プログラムの中から _() で囲った部分を自動で見つけ出します。
二つ目は「翻訳ファイルの作成」です。日本語用、英語用といった専用のファイルを作ります。
三つ目は「翻訳の記入」です。ファイルを開いて、翻訳後の言葉を書き込みます。
この作業には、先ほどインストールした「Babel」の機能を使います。少し専門的ですが、命令を打ち込むだけで「メッセージカタログ」と呼ばれるファイルができあがります。このファイルの中に翻訳を書き込んでいく作業は、まるでパズルを埋めるようで楽しいですよ。文字化けを防ぐために、保存するときは必ず「UTF-8」という形式を選ぶのがコツです。
7. HTMLメールを使ってオシャレなメールを送る
文字だけのメールもいいですが、最近は写真やボタンがついた「HTMLメール」が主流です。多言語対応しながらHTMLメールを送る方法も見てみましょう。HTMLとは、Webページを作るための言語のことです。メールも一つの小さなWebページのように作ることができます。
<!-- templates/mail.html という名前で保存します -->
<h1>{{ _('こんにちは!') }}</h1>
<p>{{ _('私たちのサービスにご登録いただき、ありがとうございます。') }}</p>
<a href="https://example.com" class="btn">{{ _('公式サイトを見る') }}</a>
このように、HTMLファイルの中でも {{ _('...') }} という形を使えば、メールのデザインはそのままに、言葉だけを切り替えることができます。Flaskの「render_template」という機能を使って、このHTMLをメールの本文として読み込むだけで、プロが作ったような多言語メールが完成します。見た目が綺麗なメールが届くと、お客さんもきっと喜んでくれるはずです。
8. 翻訳を反映させる最終チェック
翻訳を書き込んだら、最後に「コンパイル」という作業が必要です。これは、人間が書いた翻訳ファイルを、コンピュータが読み取れるように翻訳(変換)する作業のことです。これを忘れると、「せっかく翻訳を書いたのに反映されない!」というトラブルの原因になります。
もし、メールが送られなかったり、翻訳がうまくいかなかったりした場合は、以下のポイントをチェックしてみてください。
1. メールサーバーのパスワードが間違っていないか。
2. 翻訳ファイルのコンパイルを忘れていないか。
3. 翻訳の記号 _() を書き忘れていないか。
最初はエラーが出ることもありますが、一つずつ確認すれば必ず解決できます。プログラミングにおいて、エラーは「間違い」ではなく「ヒント」です。落ち着いて対処すれば、あなたも立派な多言語メール配信システムの開発者です!