TwilioSendGridを使用してPythonFlaskアプリケーションからメールを送信する

公開: 2020-06-30

電子メールインフラストラクチャを構築するか購入するかを決定することは、簡単な決定ではありません。 配信可能性の問題をサポートするための帯域幅はありますか? あなたは成長するにつれてあなたの送信に追いつくことができますか? より費用効果の高いものは何ですか? 考慮すべき要素はたくさんありますが、それは別のガイド(このBuilditやBuyItガイドなど)の会話です。

代わりに、このチュートリアルでは、専用の電子メールサービスを介して電子メールを送信することがいかに簡単であるかを示します。 FlaskフレームワークとFlask-Mail拡張機能を使用してTwilioSendGridを介して電子メールを配信する方法について説明します

チュートリアルツール

このチュートリアルに従うには、次のアイテムが必要です。

  • Python3.6以降。 オペレーティングシステムがPython3.6以降のインタープリターを提供していない場合は、 python.orgにアクセスしてインストーラーをダウンロードできます。
  • 無料のTwilioSendGridアカウント。 Twilio SendGridを初めて使用する場合は、トライアルアカウントにサインアップしてください。 トライアルアカウントを使用すると、30日間で40,000通のメールを送信でき、その後は1日あたり100通のメールを永久に送信できます。

SendGridを設定する

SendGridを介して電子メールを送信する前に、SendGridサービスへのアクセスを認証するために使用するAPIキーを作成する必要があります。 SendGridアカウントにログインし、左側のサイドバーをクリックして[設定]、[ APIキー]の順に選択します 「APIキーの作成」をクリックします。

APIキーにわかりやすい名前を付けます(何を指しているのかを覚えておくために、シンプルでわかりやすい名前にしてください)。 このチュートリアルでは、 Flask-Mailという名前を選択しました。 アクセス許可には「フルアクセス」を選択しました。これにより、キーは必要なすべての電子メール送信機能(GET、PATCH、PUT、DELETE、およびPOSTエンドポイントへのアクセス)を実行できます。 非常に具体的な権限を持つキーを作成する場合は、[制限付きアクセス]を選択し、必要に応じてアクセスを構成します。

「作成して表示」ボタンをクリックすると、キーが表示されます。 このキーは二度と表示されないので、クリックしてクリップボードにコピーする必要があります。 次に、後で使用できるように、安全なドキュメントに貼り付けます。 キーを紛失した場合は、新しいキーを生成する必要があります。 キーを保存したら、「完了」ボタンをクリックできます。

Python環境の構築

セットアップが完了したので、PythonFlaskアプリケーションからメールを送信する方法を詳しく見ていきましょう。 まず、コンピューター上に* twilio-sendgrid-tests *(または同様のもの)という新しいディレクトリを作成し、その中に新しいPython仮想環境を作成します。

MacおよびUnixユーザーの場合、コマンドは次のとおりです。

Windowsユーザーの場合、コマンドは次のとおりです。

次に、仮想環境にFlask、Flask-Mail、およびpython-dotenvをインストールします。

Flaskアプリケーションのセットアップ

ファイルapp.pyにスターターFlaskおよびFlask-Mailアプリケーションを作成しましょう

ここでは、SendGridのSMTPサービスを使用するようにFlask-Mailを適切に構成する方法を確認できます。 重要な設定は次のとおりです。

  • メールサーバーは`smtp.sendgrid.net`である必要があります。
  • メールポートは587である必要があります(いつどのポートを使用するか知っていますか?このブログ投稿をチェックしてください。
  • TLSを有効にする必要があります。SSLとTLSの違いは何ですか?)
  • 認証が必要です。 ユーザー名には、 `apikey`を使用する必要があります(これはすべてのSendGridアカウントで同じです)。 パスワードは、前のセクションで作成したSendGridAPIキーです。

このFlaskアプリケーションでは、Flask-Mail拡張機能の適切な構成キーに上記の設定を追加しました。 セキュリティ上の理由から、`SENDGRID_API_KEY`という名前の環境変数からAPIキーをインポートしました。 また、環境変数からデフォルトの送信者の電子メールアドレスを設定します。 これは、デフォルトですべての電子メールの「差出人」フィールドに表示される電子メールアドレスです。

次の2つの必須変数を使用して.envファイルを作成します。

Flaskは(python-dotenvパッケージがインストールされている限り) .envファイルで定義された変数を自動的にインポートするため、これら2つの変数をFlaskアプリケーション構成に取り込むにはこれで十分です。

テストメールの送信

Pythonシェルからテストメールを送信する方法を見てみましょう。

`flaskshell`コマンドでPythonシェルを開始したことに注意してください。 これにより、 app.py構築したFlaskアプリケーションが確実にインポートされます。

シェルに入ったら、app.pyで作成した`mail`インスタンスと`Message`クラスをFlask-Mailからインポートします

次に、`Message`インスタンスを作成します。

最後のステップは、このメールを送信することです。

以上です! すべてが計画どおりに進んだ場合、メールはほんの数秒で受信トレイに届きます。

この機能を統合したFlaskルートの例を見たい場合は、 app.pyの下部に追加できる簡単な例を次に示します。

サンプルアプリケーションを完了するには、 index.htmlテンプレートファイルを追加する必要があります。 まず、テンプレート用のディレクトリを作成します。

次に、次のコンテンツをファイルtemplates/index.htmlに書き込みます。

次のコマンドでテストアプリケーションを実行します。

次に、Webブラウザでhttp:// localhost:5000に移動して、アプリケーションにアクセスします。

これで、受信者の電子メールアドレスを入力できます。ボタンをクリックすると、テスト電子メールがそのアドレスに送信されます。

配信の問題のトラブルシューティング

上記のFlaskアプリケーションを使用すると、メールの送信に成功するはずです。 ただし、メールが配信されない可能性があります。 SendGridは電子メールを非同期で送信するため、ほとんどの配信エラーは送信者がトランザクションの側を完了した後に発生します。したがって、アプリケーションにはエラーが発生したことを示すものはありません。 これが発生した場合は、受信者の電子メールサーバーによって電子メールが拒否された可能性があります。

幸い、説明したようにメールを送信してこれを経験した場合は、TwilioSendGridダッシュボードを使用して何が起こったかをデバッグできます。 SendGridダッシュボードで、[アクティビティ]をクリックし、ページの中央にある[すべてのアクティビティを表示]ボタンをクリックします。 これにより、送信しようとしたすべての電子メールのリストが表示され、それらが正常に配信されたかどうかが示されます。

上の写真では、example.comアドレスに送信された電子メールが配信されなかったことがわかります。 配信されなかった電子メールについては、電子メールをクリックして、受信者の電子メールサーバーから送信されたエラー応答などの詳細情報を表示できます。

メールが送信されない理由を特定したら、これらの配信の問題を解決する方法はいくつかあります。 電子メール(@yaho.comや@gmal.comなど)に多くのスペルミスが見られる場合は、電子メール検証ツールを調べて、電子メールの連絡先リストにある一般的なスペルミスを見つける価値があるかもしれません。

送信レピュテーションの低下やIPアドレスのブロックなど、配信の失敗につながる可能性のある他の多くの問題があります。 2020年のEメール配信可能性ガイドでEメール配信可能性のすべてを学びましょう

結論

チュートリアルからわかるように、Twilio SendGridは、開始のFlaskメール送信ワークフローに簡単に統合できるため、メールの送信は簡単なタスクになります。

PythonのFlaskFrameworkからどのようにメールを受信するのか疑問に思っている場合は、心配しないでください。 この記事をチェックしてください: Python用のFlaskフレームワークでメールを受信する方法

また、Twilio SendGridと統合する方法、またはAPIを介して送信する方法の詳細については、ナレッジセンターをご覧ください