フラスコで電子メールを送る方法


フラスコは、人気のPython Webフレームワークと多くのWeb開発者のための好ましい選択です.それはしばしば限られた能力とPythonでの開発への一般的なミニマリストアプローチのため、MicroFrameworkと呼ばれる.このように、それはまた、電子メールを送信するためのネイティブのソリューションを提供していませんが、優れたフラスコメールの拡張子を使用してそれを構成する以上.
この記事では、どのように構成し、フラスコメールでメールを送信する方法を説明します.開始するには、伝統的にPIPで行ういくつかの簡単なインストールを気にする必要があります.あなたがまだインストールされているフラスコを持っていないならばHow to Send Emails in Flask アットMailtrap ブログ.

フラスコにメールを送る


フラスコメールで送るメールはメールクラスのインスタンスで処理されます.from flask import Flask
from flask_mail import Mail
app = Flask(app_name) # pick the name
mail = Mail(app)
URL規則('/')でマップされたメッセージオブジェクトを設定し、メッセージの基本的な詳細を挿入する必要があります.
@app.route("/")
def index():
  msg = Message('Hello from the other side!', sender =   '[email protected]', recipients = ['[email protected]'])
  msg.body = "Hey Paul, sending you this email from my Flask app, lmk if it works"
  mail.send(msg)
  return "Message sent!"
全てのコードは、以下のようになります.
from flask import Flask
from flask_mail import Mail

app = Flask(app_name)

app.config['MAIL_SERVER']='smtp.mailtrap.io'
app.config['MAIL_PORT'] = 2525
app.config['MAIL_USERNAME'] = '97e041d5e367c7'
app.config['MAIL_PASSWORD'] = 'cfaf5b99f8bafb'
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USE_SSL'] = False
mail = Mail(app)

@app.route("/")
def index():
  msg = Message('Hello from the other side!', sender =   '[email protected]', recipients = ['[email protected]'])
  msg.body = "Hey Paul, sending you this email from my Flask app, lmk if it works"
  mail.send(msg)
  return "Message sent!"

if __name__ == '__main__':
   app.run(debug = True)
Pythonシェルでオープンするhttp://localhost:5000/ , と受信トレイにメールが到着したかどうかを確認します.それは確かに我々の到着!
カスタマイズ
MailRound DefaultRound送付者の設定から、デフォルトでは、noneに設定され、我々はセットアップでスキップします.しかし、同じアドレスから送信し続けたいなら、そこで指定するのは理にかなっています.
良いアイデアは、送信者の表示名を指定することです.msg = Message('Hello from the other side!', sender = ("Alexandra from Mailtrap", '[email protected]')また、メッセージのHTMLバージョンを指定することもできます.それは、ボディーメッセージまたはそれなしで一緒に送られることができます.msg.body = "Hey Paul, sending you this email from my Flask app, lmk if it works"
msg.html = "<b>Hey Paul</b>, sending you this email from my <a href="https://google.com">Flask app</a>, lmk if it works"
また、CCおよび/またはBCCの誰かを追加することが、アドレスに回答を設定し、余分なヘッダーを追加するなど.以下にパラメータの一覧を示します.flask-mail.Message(subject, recipients, body, html, sender, cc, bcc, reply-to, date, charset, extra_headers, mail_options, rcpt_options)添付ファイルの追加
フラスコメールも我々のメッセージに添付ファイルを添付する簡単な方法を提供します.openCount Resources ()メソッドを使用してロードする必要があります.with app.open_resource("invoice.pdf") as fp:
msg.attach("invoice.pdf", "application/pdf", fp.read())
適当なものを選んでくださいMIME Type それぞれのファイルに対して、それぞれがスクリプトと同じディレクトリにアップロードされます.
バルクメッセージの送信
ほとんどの場合、上記のフラスコメールの例は十分でしょうが、各リクエストに対して何十ものか何百ものメールを送る必要があるとき、状況があります.例えば、いろいろなcron仕事について考えてください.
そのためには、Pythonの"with "文を使うことができます.すべてのメールが送信されるまで、私たちの電子メールへの接続は生きています.あなたが送られるメールの最大数を指定するならば、構成(デフォルトでは、制限なしでセットされます)からMailSum Maxsenメールを使ってください.
with mail.connect() as conn:
    for user in users:
        message = '...'
        subject = "Hello from the other side!"
        msg = Message(recipients=[user.email],
                      body=message,
                      subject=subject)

        conn.send(msg)

その他のオプション
フラスコメールはまた、すぐにメールを構成するために、より多くのオプションを提供し、ヘッダー、体を追加し、他のパラメータの数.それは簡潔かつ非常に把握しやすいです.
チェックするofficial documentation 彼ら全員を見るために、ここで.

メールを非同期に送信する


メールを設定する際に考慮する重要な側面は、非同期に送信する可能性です.
典型的な状況を見てみましょう.ユーザーは、あなたにメールを送る意図であなたのサイトに入ります.彼らはフォームを記入し、'送信'ボタンを押すと待ちます.
バックグラウンドでは、テンプレートをまとめてESP(電子メール送信プロバイダ)に到達しようとする.ほとんどの時間、それは数ミリ秒以内に応答し、ユーザーがいくつかの“ありがとう”ページにリダイレクトされながらメールを送信します.
サーバーが非常に敏感であるならば、問題は積み重なります、そして、それは応答を得るためにミリ秒よりむしろ秒かかります.時々、接続はタイムアウトさえするかもしれません.これに加えて、複数のユーザが同時にこれを実行しようとする可能性があります.あなたのアプリがそれのためにクラッシュするならば、どんなメールも送られません.
現在、これはしばしば仮説的シナリオです.評判の良いESPSは、信頼性のために彼らの評判を得ました.ping postmarkまたはsendgridと、おそらく100 - 200 ms以上の応答を待つ必要はありません.一度にそれらを数十人のメールを送信し、彼らは簡単にそれらを処理します.
実際には、ほとんどの場合、すべての場合、人気のESPのメールを送信asyncとにかく.それは彼らのそれぞれがバックグラウンドで実行する根本的な検証のためですsender reputation .
これらのもののどれも、あなたのアプリがまだ電子メールが送られるたびに外部サービスに接続するという事実を変えません.だからこそ、あなたのアプリケーションに非同期機能を追加することを検討する必要があります.
セロリとフラスコメールで電子メールを送る方法を学んでくださいEmail Sending with Flask .

フラスコにおける電子メールのテスト


任意の電子メール機能を展開する前に、あなたは確かにメールが実際にユーザーをスパムなしで送信されているかどうかをテストする方法が必要です.
また、これらの電子メールの一部を参照してください可能性がありますので、チャンスがあるかを改善する2つのことがあります.
最初の部分は簡単に送信をブロックする簡単なフラスコの設定で処理することができます.これは2つの方法で行うことができます.
  • 以前の設定からfalseに設定します.
  • 設定ファイルに新しい設定を追加-テスト-とtrueに設定します.
  • 次に、あなたのフラスコアプリから送信されているかを確認するRecordRankメッセージメソッドを使用することができますblinker package インストール).あなたはoutboxの下のメッセージインスタンスのリストを見るでしょう.
    with mail.record_messages() as outbox:
    
        mail.send_message(subject='testing',
                          body='test',
                          recipients=emails)
    
        assert len(outbox) == 1
        assert outbox[0].subject == "testing"
    
    しかし、しかし、あなたのアプリケーションを送信する電子メールを表示したい場合は、別のソリューションが必要になります.テキストの前に、我々は簡単にフラスコのアプリに接続することができますメールトラップを示した.それは偽のSMTPとして、あなたの発信メールを傍受し、仮想受信トレイに入れて動作します.
    各メールはあなたのメールトラップダッシュボードに表示されます.あなたはそれが異なる画面でどのように見えるかをプレビューできます.ヘッダーを検証し、HTML/CSSのサポートを確認することができます.
    他の機能の中には、スパムスコア、ブラックリスト、BCCのトラッキング、電子メールの転送、および複数の受信トレイです.それは確かに上記のものよりテストのより快適な方法です、そして、あなたはちょうど送るより多くをテストするようになります.
    自分でテスト!あなたは無料で開始することができますMailtrap .
    メールを送ることは、多くのフラスコアプリケーションの重要な部分です.ユーザーがアカウントを作成すると、確認メールがすぐに受信トレイをヒットする必要があります.彼らは自分のパスワードを忘れたときは、アプリに組み込まれてリセットするための便利なメカニズムは、彼らの生活をはるかに簡単になります.
    他の状況のトンが自動生成された電子メールが必要です.幸いにも、それは本当に簡単に物事を設定し、数分以内に最初のメールを送信します.フラスコメールと我々の完全な記事の他のオプションについて詳しく知るSending Emails with Flask - Step-by-Step Flask-Mail Guide .